Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01704:Zeichenfolgenliteral zu lang „Fehler beim Einfügen eines XML-Dokuments in den Oracle-Spaltentyp XMLTYPE“

Ich vermute, Sie übergeben das XML als Literal an die Insert-Anweisung. Oracles SQL kann nur bis zu 4000 Zeichen in einem Literal verarbeiten. Andernfalls müssen Sie Bind-Variablen verwenden und diese in Blöcken übergeben. Oder Sie können PL/SQL verwenden.

Dies sollte beispielsweise problemlos funktionieren, da das Literal

<MyMessage>Meeesaaagee</MyMessage> 

ist nur 34 Zeichen lang:

CREATE TABLE TEST_REPORTS
(
   ID            NUMBER,
   DESCRIPTION   VARCHAR2 (50),
   XML           XMLTYPE NULL
);

INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
     VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));

COMMIT;

Aber wenn du hättest:Meeesaaagee (+ 3976 zusätzliche Zeichen)

Sie erhalten den Fehler ORA-01704:string literal too long.

Sie könnten Folgendes versuchen:

DECLARE
    in_xml_value varchar2(32767);
BEGIN
    in_xml_value := '<MyMessage>MeeesaaageeBLAHBLAHBLAH<--repeat--></MyMessage>';
    INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
     VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML (in_xml_value);
    commit;
END;
/

Tun Sie es ohne PL/SQL-Code und um Bind-Variablen zu verwenden, müssten Sie mit einem Anwendungsentwickler sprechen. Es ist außerhalb von Oracle (und außerhalb meines Wissens).