2012-12-19 22 views
21

Mentre cerco di impostare il valore di oltre 4000 caratteri su un campo che ha tipo di dati CLOB, mi dà questo errore:errore: ORA-01704: stringa letterale troppo lunga

ORA-01704: string letterale troppo lungo.

Qualsiasi suggerimento, che tipo di dati sarebbe applicabile per me se devo impostare il valore di caratteri illimitate, anche se per il mio caso, capita di essere di circa 15000 caratteri.

Nota: la stringa lunga che sto tentando di memorizzare è codificata in ANSI.

risposta

36

Cosa si utilizza quando si utilizza CLOB?

In ogni caso si può fare con PL/SQL

DECLARE 
    str varchar2(32767); 
BEGIN 
    str := 'Very-very-...-very-very-very-very-very-very long string value'; 
    update t1 set col1 = str; 
END; 
/

Proof link on SQLFiddle

+0

Grazie, ma CI non supporta questi materiali di procedura http://stackoverflow.com/questions/13946641/error-this-feature-is-not-available-for-the-database-you-are-using# comment19232999_13946641 – hsuk

+0

Immagino che tu possa avvolgere questo codice in una procedura e Codeigniter possa eseguirlo. Scusa ma non ho Codeigniter per il controllo. Guarda qui [link] (http://stackoverflow.com/a/7930092/1910242) – knagaev

+0

Lo ha fatto, ma potrei definire quella dimensione di varchar2, controlla questo link, http://stackoverflow.com/questions/13947222/error -ora-06553-pls-306-numero errato-o-tipi-di-argomenti-nella-chiamata-a-procedura/13947420 # 13947420 – hsuk

14

cerca di dividere i personaggi in più pezzi, come la query qui sotto e provare:

Insert into table (clob_column) values (to_clob('chunk 1') || to_clob('chunk 2')); 

E ' ha funzionato per me

1

La divisione funziona fino a 4000 caratteri in base ai caratteri che si stanno inserendo. Se stai inserendo caratteri speciali, può fallire. L'unico modo sicuro è dichiarare una variabile.