Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle Contains не работи

Две възможни причини - индексът може да не е синхронизиран и CONTAINS изглежда съвпада с думи, докато LIKE съвпада с низове.

Пример за два низа, където LIKE съвпада и с двете, но CONTAINS не съвпада с нито едно:

create table test1(must_fix_by varchar2(4000));
create index cidx_mustfixby on test1(must_fix_by) indextype is ctxsys.context;
insert into test1 values('Q234567');
insert into test1 values('Q2 234567');
select * from test1 where must_fix_by like 'Q2%';

MUST_FIX_BY
-----------
Q234567
Q2 234567

select * from test1 where contains(must_fix_by, 'Q2') > 0;

no rows selected

По подразбиране, CONTEXT индексите трябва да бъдат ръчно синхронизирани . Трябва или да изпълните:exec ctx_ddl.sync_index('cidx_mustfixby'); , или трябва да създадете своя индекс с on commit .

exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;

MUST_FIX_BY
-----------
Q2 234567

Това коригира един от проблемите. Но Q234567 все още не съответства. Не знам много за Oracle Text и дори не мога да намеря просто описание как CONTAINS върши работа. Но изглежда, че се основава на пълни думи вместо на низове. Трябва да има някаква граница на думата между Q2 и други знаци, за да може тя да бъде взета от прост CONTAINS филтър.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Основно администриране на Oracle 12c Multitenant

  2. Oracle Database 21c

  3. Изберете стойност на xml елемент в Oracle

  4. Създайте функция за връщане на текущата дата и час в Oracle

  5. грешка при невалиден знак при незабавно изпълнение