2012-12-19 7 views
21

Während ich versuche, auf einem Feld den Wert von mehr als 4000 Zeichen zu setzen, den Datentyp hat CLOB, es gibt mir diese Fehlermeldung:Fehler: ORA-01704: Stringliteral zu lange

ORA-01704: string wörtlich zu lang.

Jeder Vorschlag, der Datentyp für mich anwendbar wäre, wenn ich den Wert unlimited Zeichen gesetzt haben, obwohl für meinen Fall, kommt es von etwa 15000 Zeichen sein.

Hinweis: Die lange Zeichenfolge, die ich zu speichern versuchen in ANSI codierte.

Antwort

36

Was sind Sie, wenn sie mit CLOB betreiben?

In jedem Fall können Sie es mit PL/SQL tun

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

Danke, aber CI ist nicht auf diese Verfahren stopft Unterstützung http://stackoverflow.com/questions/13946641/error-this-feature-is-not-available-for-the-database-you-are-using# comment19232999_13946641 – hsuk

+0

Ich denke, Sie können diesen Code in eine Prozedur einbinden und Codeigniter kann sie ausführen. Sorry aber ich habe keinen Codeigniter zur Überprüfung. Schauen Sie hier [link] (http://stackoverflow.com/a/7930092/1910242) – knagaev

+0

es tat, aber ich konnte definieren, die eine Größe von varchar2, überprüfen Sie diesen Link, http://stackoverflow.com/questions/13947222/error -ORa-06553-pls-306-falsch-number-oder-Typen-of-Argumente-in-Call-to-proced/13947420 # 13947420 – hsuk

14

Versuchen Sie, die Zeichen in mehrere Stücke wie die Abfrage, und versuchen Sie zu spalten:

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

Es hat für mich gearbeitet.

1

Die geteilte Arbeit bis 4000 Zeichen auf die Charaktere abhängig, die Sie eingefügt werden. Wenn Sie Sonderzeichen einfügen, kann dies fehlschlagen. Der einzige sichere Weg besteht darin, eine Variable zu deklarieren.