sql >> Base de Datos >  >> RDS >> Oracle

ORA-01704:cadena literal demasiado larga 'Error al insertar un documento XML en el tipo de columna Oracle XMLTYPE'

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).