Использование REGXP_LIKE в queryExecute () - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь изменить существующий запрос, чтобы использовать REGEXP_LIKE, но нарушил синтаксис, который я неправильно понимаю. В настоящее время мы выполняем запрос CF в базу данных Oracle с использованием следующего:

result = QueryExecute("
  SELECT paramOne, paramTwo FROM someTable WHERE fieldOne = :PUBLISHER
", {PUBLISHER=publisherId}, {datasource="someDB"});

, который работает. Однако я хочу изменить базовый запрос следующим образом:

result = QueryExecute("
  SELECT paramOne, paramTwo FROM someTable WHERE REGEXP_LIKE(fieldOne, '(^|,)(:PUBLISHER)($|,)', 'i')
", {PUBLISHER=publisherId}, {datasource="someDB"});

, но он не дает ожидаемых результатов. Несколько вещей, которые я заметил при попытке отладки ...

  • Базовый запрос (без использования переменной) работает и был проверен в Oracle SQL

  • Если я go к исходному коду и заменим: ИЗДАТЕЛЬ на «жестко запрограммированное» значение, все будет работать как положено.

  • I ' мы пытались экранировать ':', но это не ответ.

Я упал, что что-то не понимаю в передаче переменных в выражение REGEX в queryExecute(), поэтому буду признателен любому мысли.

Любой вклад с благодарностью получил, Фил

1 Ответ

3 голосов
/ 27 апреля 2020
SQL> 
with t (fieldOne) as  (
  select 'abc, def' from dual union all
  select 'def cba' from dual union all
  select ':publisher' from dual
)
select * from t where REGEXP_LIKE(fieldOne, '(^|,)(:PUBLISHER)($|,)', 'i');

FIELDONE  
----------
:publisher

SQL> 
with t (fieldOne) as  (
  select 'abc, def' from dual union all
  select 'def cba' from dual union all
  select ':publisher' from dual
)
select * from t where REGEXP_LIKE(fieldOne, '(^|,)(' || :PUBLISHER || ')($|,)', 'i');

FIELDONE  
----------
abc, def
...