2010-03-12 4 views
13

J'ai beaucoup de résultats inutiles en utilisant la méthode contains() dans ma requête. Ne me dites pas d'utiliser comme ou quelque chose d'autre. Il est codé en dur et ne peut pas être changé.Comment fonctionne contains() dans PL-SQL?

+2

Pourriez-vous envoyer la requête? – Padmarag

+0

puis-je passer des paramètres dans contient pour affiner les résultats de recherche à résultat exact – Artic

+0

Sélectionnez * from blabla où contient (dFullText, "car") – Artic

Répondre

15

Contient est utilisé sur les champs de texte qui ont un « contexte Index », qui indexe un champ de texte pour la recherche. L'usage standard est comme celui-ci (en utilisant l'opérateur score pour afficher ce qui est renvoyé de la clause contains sur la base 1 contains correspondant au 1 score):

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

Pour les données comme celui-ci dans le tableau table_name

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

Cette requête retournerait

2 A 
1 C 

contient donc est similaire à comme, mais comptera combien de fois une chaîne se produit dans un champ de texte. Je ne pouvais pas trouver une ressource en utilisant la façon dont il Contient est utilisé dans la requête que vous avez publié, mais je pense que ce serait retourner les lignes où dFullText a au moins une instance de car en elle, ou l'équivalent de cette sql:

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

Here est une autre source.

+0

Y at-il une différence entre contains() et instr()? – Rene

+0

@Rene, oui, ils sont différents. 'Contains()' compte combien de fois une chaîne se produit dans un champ de texte et renvoie ce nombre. 'instr()' recherche une chaîne dans un champ (ou une autre chaîne) et renvoie l'index de la première chaîne de recherche trouvée (ou 0 s'il n'est pas trouvé). Voir des exemples de 'instr()' sur http://www.techonthenet.com/oracle/functions/instr.php – rosscj2533

0

Voir cet exemple de 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; 
Questions connexes