Je suppose que vous transmettez le XML en tant que littéral à l'instruction d'insertion. Le SQL d'Oracle ne peut gérer que jusqu'à 4000 caractères dans un littéral. Sinon, vous devez utiliser des variables de liaison et les transmettre en morceaux. Ou vous pouvez utiliser PL/SQL.
Par exemple, cela devrait fonctionner sans problème car le littéral
<MyMessage>Meeesaaagee</MyMessage>
n'est que de 34 caractères :
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;
Mais si vous aviez :Meeesaaagee (+ 3976 caractères supplémentaires)
Vous obtiendrez l'erreur ORA-01704 :littéral de chaîne trop long.
Vous pouvez essayer :
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;
/
Faites-le sans code PL/SQL et pour utiliser des variables de liaison, eh bien, vous devrez parler avec un développeur d'applications. C'est en dehors d'Oracle (et en dehors de ma connaissance).