Supongo que está pasando el XML como un literal a la declaración de inserción. El SQL de Oracle solo puede manejar hasta 4000 caracteres en un literal. De lo contrario, debe usar variables de vinculación y pasarlas en fragmentos. O puede usar PL/SQL.
Por ejemplo, esto debería funcionar sin problemas porque el literal
<MyMessage>Meeesaaagee</MyMessage>
tiene solo 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;
Pero si tuvieras:Meeesaaaagee (+ 3976 caracteres extra)
Obtendrá el ORA-01704:error de cadena literal demasiado larga.
Podrías probar:
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;
/
Hágalo sin código PL/SQL y para usar variables de vinculación, bueno, tendría que hablar con un desarrollador de aplicaciones. Está fuera de Oracle (y fuera de mi conocimiento).