Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01704:chaîne littérale trop longue 'Erreur lors de l'insertion du document XML dans le type de colonne Oracle XMLTYPE'

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