Ik vermoed dat je de XML als een letterlijke waarde doorgeeft aan de insert-instructie. Oracle's SQL kan maximaal 4000 karakters in een letterlijke tekst verwerken. Anders moet u bindvariabelen gebruiken en deze in brokken doorgeven. Of u kunt PL/SQL gebruiken.
Dit zou bijvoorbeeld probleemloos moeten werken omdat de letterlijke
<MyMessage>Meeesaaagee</MyMessage>
is slechts 34 tekens:
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;
Maar als je had:Meeesaaagee (+ 3976 extra tekens)
U krijgt de ORA-01704:string letterlijk te lang fout.
Je zou kunnen proberen:
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;
/
Doe het zonder PL/SQL-code en om bindvariabelen te gebruiken, zou je met een applicatieontwikkelaar moeten praten. Het ligt buiten Oracle (en buiten mijn kennis).