Как работает() в PL-SQL?

Получите много ненужных результатов, используя метод contains() в моем запросе. Не говори мне, что я использую что-то еще. Он жестко запрограммирован и не может быть изменен.

Ответ 1

Содержит используется в текстовых полях с индексом CONTEXT, который индексирует текстовое поле для поиска. Стандартное использование аналогично (с помощью оператора score для отображения того, что возвращается из предложения contains на основе 1 в contains, соответствующего 1 в score):

SELECT score(1), value
FROM table_name
WHERE CONTAINS(textField, 'searchString', 1) > 0;

Для данных, подобных этому в таблице table_name

value  |  textField
-------|-----------------------------------------------
A      |   'Here is searchString.  searchString again.'
B      |   'Another string'
C      |   'Just one searchString'

Этот запрос вернет

2 A
1 C

Таким образом, содержит аналогично, но будет подсчитывать, сколько раз строка появляется в текстовом поле. Я не мог найти ресурс, используя Содержит, как он используется в запросе, который вы отправили, но я думаю, что он вернет строки, где dFullText имеет по крайней мере один экземпляр car в нем или эквивалент этого sql:

Select * from blabla where dFullText like "%car%"

Здесь - еще один источник.

Ответ 2

См. этот пример из oracle.com

declare 
rowno number := 0; 
   begin 
   for c1 in (SELECT SCORE(1) score, title FROM news 
          WHERE CONTAINS(text, 'oracle', 1) > 0
          ORDER BY SCORE(1) DESC) 
   loop 
   rowno := rowno + 1; 
   dbms_output.put_line(c1.title||': '||c1.score); 
exit when rowno = 10; 
end loop; 
end;