Mit gæt er, at du videregiver XML'en som en bogstavelig til indsættelseserklæringen. Oracles SQL kan kun håndtere op til 4000 tegn i en bogstavelig. Ellers skal du bruge bindevariabler og videregive dem i bidder. Eller du kan bruge PL/SQL.
For eksempel skulle dette fungere uden problemer, fordi den bogstavelige
<MyMessage>Meeesaaagee</MyMessage>
er kun 34 tegn:
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 hvis du havde:Meeesaaagee (+ 3976 ekstra tegn)
Du får fejlen ORA-01704:streng bogstavelig talt for lang.
Du kan prøve:
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 uden PL/SQL-kode og for at bruge bindevariabler, så skal du tale med en applikationsudvikler. Det er uden for Oracle (og uden for min viden).