Nous utilisons un logiciel qui a limité Oracle capacités. J'ai besoin de filtrer à travers un CLOB domaine en s'assurant qu'il a une valeur spécifique. Normalement, en dehors de ce logiciel, je voudrais faire quelque chose comme:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Cependant, ce n'est pas pris en charge donc je suis d'essayer d'utiliser CAST
au lieu de cela. J'ai essayé beaucoup de différentes tentatives, mais jusqu'à présent, ils sont ce que j'ai trouvé:
Le logiciel dispose d'une requête intégrée vérificateur/validator et ce sont celles qu'il indique comme étant non valide:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Cependant, le validateur n'accepter les présentes:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Malheureusement, même si le validateur permet à ceux-ci d'aller à travers, lors de l'exécution de la requête pour récupérer les données, j'obtiens ORA-22835: Buffer too small
lors de l'utilisation de VARCHAR
ou NVARCHAR
. Et je reçois ORA-25137: Data value out of range
lors de l'utilisation de CHAR
.
Il existe d'autres moyens que je pourrais essayer pour vérifier que mon CLOB champ a une valeur spécifique lors de filtrage des données? Si non, comment puis-je résoudre mes problèmes?
DBMS_LOB.SUBSTR()
je ne peux donc pas l'utiliser. J'ai penséCAST
est capable de couper la chaîne parce que nous avons également eu à utiliser une solution de contournement pourTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
et il fonctionne. Il se débarrasse de la partie heure. J'espérais que nous pourrions faire quelque chose de similaire pour celui-ci.