Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle Berisi tidak berfungsi

Dua kemungkinan alasan - indeks mungkin tidak disinkronkan, dan CONTAINS sepertinya cocok dengan kata-kata saat LIKE cocok dengan string.

Contoh dua string, di mana LIKE cocok dengan keduanya, tetapi CONTAINS tidak cocok:

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

Secara default, CONTEXT indeks harus disinkronkan secara manual . Anda juga perlu menjalankan:exec ctx_ddl.sync_index('cidx_mustfixby'); , atau Anda perlu membuat indeks Anda dengan on commit .

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

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

Ini memperbaiki salah satu masalah. Tapi Q234567 masih belum sepadan. Saya tidak tahu banyak tentang Oracle Text, dan saya bahkan tidak dapat menemukan deskripsi sederhana tentang bagaimana CONTAINS bekerja. Tetapi tampaknya didasarkan pada kata-kata lengkap, bukan string. Perlu ada semacam batas kata antara Q2 dan karakter lain agar dapat diambil dengan CONTAINS sederhana filter.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara Flashback ketika kita memiliki dataguard

  2. SQL Challenge/Puzzle:Diberikan jejak tumpukan - Bagaimana menemukan elemen teratas di setiap titik waktu?

  3. Mengubah tipe data di oracle tanpa menghapus data

  4. SQL Query untuk menggabungkan nilai kolom dari beberapa baris di Oracle

  5. Groovy Oracle Stored Proc - indeks kolom invaid