Meu palpite é que você está passando o XML como um literal para a instrução de inserção. O SQL da Oracle só pode lidar com até 4.000 caracteres em um literal. Caso contrário, você precisa usar variáveis de ligação e passá-las em pedaços. Ou você pode usar PL/SQL.
Por exemplo, isso deve funcionar sem problemas porque o literal
<MyMessage>Meeesaaagee</MyMessage>
tem apenas 34 caracteres:
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;
Mas se você tivesse:Meeesaaagee (+ 3976 caracteres extras)
Você receberá o erro ORA-01704:string literal too long.
Você poderia tentar:
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;
/
Faça isso sem código PL/SQL e para usar variáveis de ligação, bem, você teria que conversar com um desenvolvedor de aplicativos. Está fora da Oracle (e fora do meu conhecimento).