Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-01704:string literal muito longa 'Erro ao inserir documento XML no tipo de coluna Oracle XMLTYPE'


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