Pouvez-vous vous conseiller sur une méthode de mise à jour sur les champs de clob à Oracle?
La requête est simple et exécutée, je reçois p>
ORA-01704: string literal too long: Update table_name Set clob_field=value2 Where column=condition1 and clob_field=value1
3 Réponses :
Votre code fait-il partie de certaines procédures de PLSQL ou est une déclaration SQL simple? Passez-vous la variable "valeur2" comme variable de liaison ou une chaîne citée à l'intérieur de la requête? Êtes-vous sur 12c ou une libération antérieure d'Oracle DB?
En règle générale, le problème "non évident" le plus courant est lié au fait que le type Varchar2 est limité à 4000 caractères dans des relevés SQL. Si vous êtes dans la procédure PLSQL, la limite est de 32k caractères. P>
Pouvez-vous fournir un échantillon de code? Le fait est que, après deux déclarations, entraîne un comportement différent: p> jetez un coup d'oeil à la poste ERREUR: ORA-01704: String littéral trop long - Exemple de mise à jour dans le bloc PlsQL afin d'atteindre 32.767 Limite de caractères. P> EDIT:
Jetez un coup d'œil à la poste Travailler avec de très grandes données de texte et colonne de clob , trop p> p>
J'utilise plsql
Je vois. Je beelave que vous essayez d'assigner une chaîne supérieure à 32k à la valeur de la clou. Toute chaîne de plsql de plus que 32k augmentera cette erreur. Vous devez l'afficher à FLOB avec dbms_lob.append code> en morceaux de 32k ou moins. Jetez un coup d'œil à la poste Stackoverflow.com/Questions/20613348/...
Mettez votre valeur de chaîne à une variable de CLOB en premier:
declare c clob; s varchar2(4000); begin s:=rpad('x',4000,'x'); for i in 1..100 loop c:=c||s; end loop; dbms_output.put_line( dbms_lob.getlength(c) ); -- length of "c" is 400000 now update table_name set clob_field=c where id=12345; end; /
Comme vous le savez peut-être, il n'est pas possible d'insérer plus de 4 000 caractères à une fois dans un champ de clob avec une base de données Oracle.
Une solution de contournement pour résoudre ce problème est de scinder la chaîne entière de 2 chaînes <4k < / p>
Exemple: p> Vous pouvez utiliser "Lorem ipsum" pour effectuer le test: -) p> p>