वास्तव में, आप REGEXP_LIKE के परिणाम की तुलना PL/SQL में सशर्त कथनों को छोड़कर किसी भी चीज़ से नहीं कर सकते।
ऐसा लगता है कि हाइबरनेट एक रिटर्न टाइप के बिना एक कस्टम फ़ंक्शन को स्वीकार नहीं करता है, क्योंकि आपको हमेशा आउटपुट की तुलना किसी चीज़ से करने की आवश्यकता होती है, अर्थात:
REGEXP_LIKE('bananas', 'a', 'i') = 1
चूंकि Oracle आपको इस फ़ंक्शन के परिणाम की तुलना कुछ भी नहीं करने की अनुमति देता है, इसलिए मैं केस कंडीशन का उपयोग करके एक समाधान लेकर आया:
public class Oracle10gExtendedDialect extends Oracle10gDialect {
public Oracle10gExtendedDialect() {
super();
registerFunction(
"regexp_like", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN,
"(case when (regexp_like(?1, ?2, ?3)) then 1 else 0 end)")
);
}
}
और आपका एचक्यूएल इस तरह दिखना चाहिए:
REGEXP_LIKE('bananas', 'a', 'i') = 1
यह काम करेगा :)