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).