Ограничения regexp_*: ORA-12733: regular expression too long
Нужно при помощи regexp_like проверить большое количество, около 300, условий.
Примерно такой запрос (на db<>fiddle):
select * from t where regexp_like(val,'.*hk.*| .*jj.*|.*we.*.'|...)
Но так, как список слов/выражений в условии большой, то столкиваюсь с ограничениями при выполнения запроса:
ORA-12733: regular expression too long
ORA-01704: string literal too long
Попробовал разбить на части:
[...] and (regexp_like(col,'.*XXX*.') or regexp_like(col,'.*HHHH*.'))
вроде работает, но думаю, что возможно есть более элегантный способ.
Можно ли как то обойти ограничения не разбивая на части шаблон в regexp_like?
Ответы (1 шт):
Если учесть, что поиск идёт по большому колличеству уникальных слов, то лучше отказаться от регулярных выражений и поместить все слова в отдельную таблицу.
Пример для реализации, если границы слова всегда пробел (с данными на db<>fiddle):
create table dict (word varchar2 (32));
select t.*
from t
where exists (
select 1
from dict
where instr (' '||val||' ', ' '||word||' ')>0
)