Comment obtenir autour de 4000 caractères de limitation de text_query dans Oracle CONTIENT de l'opérateur?
Dans Oracle, le texte intégral de la syntaxe de recherche de Contient de l'opérateur est:
CONTAINS(
[schema.]column,
text_query VARCHAR2
[,label NUMBER]) RETURN NUMBER;
ce qui signifie que le text_query ne peut pas être plus de 4000 caractères ou une erreur se produit. J'ai à plusieurs reprises ont text_query plus de 4000 caractères dans de nombreux cas. Comment voulez-vous, comme un Oracle expert, suggèrent pour contourner cette limitation, si possible?
Pour clarifier la situation dans laquelle 4000 est facilement accessible, c'est que si vous combinez plusieurs Contient Des Opérateurs De Requête pour construire votre text_query, il est tout à fait possible de dépasser ces 4000 caractères de limitation.
- La limite d'un VARCHAR2 colonne de la table est de 4000 caractères, mais la limite d'un VARCHAR2 variable en PL/SQL est 32 767 caractères. Êtes-vous sûr que le texte de la requête dans une mention "CONTIENT" est limité à 4000 et pas 32767?
- CONTAINS() est une fonction SQL, de sorte que le SQL limite s'applique.
- Merci pour la clarification, je n'ai jamais réellement utilisé Oracle de l'index de Texte, donc je n'étais pas sûr
Vous devez vous connecter pour publier un commentaire.
4000 limite de caractères n'est pas une limite arbitraire: c'est le montant maximum de VARCHAR2 caractères Oracle SQL peut gérer.
4000 caractères est un beaucoup de texte. En anglais, c'est autour de 600 mots, ou une page de format A4 et un peu dans un point raisonnable de police. Il n'y a pas beaucoup d'applications que je peux penser qui nécessitent la recherche de tels de gros morceaux de verbiage. Même les collèges de la vérification des étudiants d'essais pour plagiat fonctionnerait pas plus que le niveau du paragraphe.
Toutefois, si vous avez vraiment une situation dans laquelle la mise en correspondance sur un peu de 4000 caractères génère des faux positifs tout ce que vous pouvez faire est de diviser la chaîne de requête en morceaux et la recherche sur eux. Cela signifie que vous devez utiliser PL/SQL:
Si vous ne connaissez pas la taille de la recherche de texte à l'avance, alors vous aurez besoin d'utiliser le SQL dynamique pour assembler cette. Notez qu'en passant null termes de recherche CONTIENT() va lancer
DRG-50901: text query parser syntax error
.La version actuelle prend en charge maintenant un CLOB paramètre
http://docs.oracle.com/cd/B28359_01/text.111/b28304/csql.htm#i997503