ADODB & CLOB's -> ORA-01704: string literal too long

südpol

Erfahrenes Mitglied
Hi,

ich habe hier eine kleine PHP Anwendung die im Backend auf eine Oracle 10g Datenbank zugreift. Ich verwende ADODB in der aktuellen Version zur Verbindung von PHP & Oracle.

Seit ein paar Tagen stehe ich nun vor einem Problem dessen Lösung ich einfach nicht finde. Ich versuche einen String mit mehr als 4000 Zeichen in die Datenbank zu schreiben. Das Feld ist vom Typ CLOB und sollte daher damit keine Probleme haben. Ich erhalte jedoch immer den Fehler "ORA-01704: string literal too long". Datensätze unter 4000 Zeichen sind kein Problem.

Kann mir jemand sagen ob ich ADODB erst mit meinen CLOB's bekannt machen muss und wenn ja wie das geht?
 
Hallo,

ich kenne ADODB jetzt grad nicht, unterstützt das Prepared Statements? Laut einem Foren-Eintrag im Orakel-Forum darf man davon ausgehen, das man (zu mindest bei CLOB) kein dynamisches Statement benutzen sondern statt dessen die Variable binden muss, die den Inhalt darstellt. Ich beziehe mich auf diesen Posting:

https://forums.oracle.com/forums/message.jspa?messageID=3287156#3287156 hat gesagt.:
String literals in SQL are limited to 4000 characters. Your dynamic SQL is trying to concatenate the CLOB as part of the SQL statement, turning it into a string literal. If dynamic SQL were required, you'd need to use bind variables, i.e.

EXECUTE IMMEDIATE 'INSERT INTO some_table( clob_column ) VALUES( :1 )' USING p_clob_parameter



Of course, you'd also want to use bind variables for performance and security.

Das bedeutet, man müsste den Code zu Prepared Statements umbauen weil Binding nur dort zu bewerkstelligen ist.
 
Hi!

danke für deine Antwort. Bei meinem alten (selbst geschriebenen) DB abstraction layer hatte ich das auch über bindings (empty_clob etc) implementiert. Bei der aktuellen Anwendung ist ADODB als DB Zugriffsschicht leider gegeben und grundsätzlich schreibt ADODB ja auch in clob felder - behandelt sie scheinbar aber wie varchars :-(
 
Zurück