Min gissning är att du skickar XML som en bokstavlig bokstav till insert-satsen. Oracles SQL kan bara hantera upp till 4000 tecken i en bokstavlig. Annars måste du använda bindningsvariabler och skicka det i bitar. Eller så kan du använda PL/SQL.
Detta bör till exempel fungera utan problem eftersom den bokstavliga
<MyMessage>Meeesaaagee</MyMessage>
är bara 34 tecken:
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;
Men om du hade:Meeesaaagee (+ 3976 extra tecken)
Du kommer att få felmeddelandet ORA-01704:string literal too long.
Du kan prova:
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;
/
Gör det utan PL/SQL-kod och för att använda bindningsvariabler måste du prata med en applikationsutvecklare. Det är utanför Oracle (och utanför min kunskap).