0
votes

ORA-01704: Chaîne littérale littérale à la mise à jour de la mise à jour du champ CLOB

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


0 commentaires

3 Réponses :


2
votes

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.

Pouvez-vous fournir un échantillon de code? Le fait est que, après deux déclarations, entraîne un comportement différent: xxx xxx

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.

EDIT: Jetez un coup d'œil à la poste Travailler avec de très grandes données de texte et colonne de clob , trop


2 commentaires

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 en morceaux de 32k ou moins. Jetez un coup d'œil à la poste Stackoverflow.com/Questions/20613348/...



0
votes

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; 
/


0 commentaires

1
votes

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: xxx

Vous pouvez utiliser "Lorem ipsum" pour effectuer le test: -)


0 commentaires