Как написать функцию, используемую только в предложении where, которая возвращает значение true без оператора сравнения?

Мой вопрос: В 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.

7
задан kentcdodds 14 June 2012 в 16:15
поделиться