Мой вопрос: В Oracle regexp_like работает отдельно в предложении where без необходимости сравнения с 1, 0 или строкой. Функция может быть вызвана только при оценке чего-либо в операторе case или предложении where. Поскольку это невозможно описать (попробовал поискать в словаре данных), мне интересно, как написать функцию, которая работает так же.
Например:
function is_prod
returns boolean
is
l_var boolean := false;
begin
if sys_context('userenv','db_unique_name') = '"PROD_SERVER"' then
l_var := true;
end if;
return l_var;
end;
Эта функция компилируется, но не может быть использована в операторе SQL, подобно следующему:
select *
from table t
where is_prod
Поскольку я получаю следующую ошибку: ORA-00920: недопустимый реляционный оператор.
Сравнение с числом или с правдой тоже не работает.
Где я могу найти базу кода для regexp_like или что мне нужно сделать, чтобы это работало как regexp_like?
Примечание. Я провел несколько часов в поиске и обнаружил, что функции регулярных выражений Oracle на самом деле являются вызовами Java, но это означает, что им по-прежнему нужна оболочка pl/sql.