Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle Contains không hoạt động

Hai lý do có thể xảy ra - chỉ mục có thể không được đồng bộ hóa và CONTAINS dường như khớp với các từ trong khi LIKE khớp với các chuỗi.

Ví dụ về hai chuỗi, trong đó LIKE khớp với cả hai, nhưng CONTAINS không phù hợp với:

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

Theo mặc định, CONTEXT chỉ mục cần được đồng bộ hóa theo cách thủ công . Bạn cần chạy:exec ctx_ddl.sync_index('cidx_mustfixby'); hoặc bạn cần tạo chỉ mục cho mình bằng on commit .

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

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

Điều này khắc phục một trong những vấn đề. Nhưng Q234567 vẫn chưa khớp. Tôi không biết nhiều về Oracle Text và thậm chí tôi không thể tìm thấy một mô tả đơn giản nào về cách CONTAINS làm. Nhưng nó dường như dựa trên các từ đầy đủ thay vì chuỗi. Cần phải có một số loại ranh giới từ giữa Q2 và các ký tự khác để nó được chọn bằng một CONTAINS đơn giản bộ lọc.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa tất cả các ký tự sau một ký tự cụ thể trong PL / SQL

  2. Tìm mẫu và bản trình diễn cho một phiên bản JDK cụ thể

  3. CHỌN Dữ liệu TỪ CURSOR của GÓI, in nó

  4. Cách tạo VARRAY làm đối tượng cơ sở dữ liệu trong cơ sở dữ liệu Oracle

  5. Lỗi khi cố gắng đổi tên các cột có khoảng trắng trong bảng oracle. Lỗi - Lỗi SQL:ORA- 00946:thiếu từ khóa TO