Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01704:stringa letterale troppo lunga 'Errore durante l'inserimento di un documento XML nel tipo di colonna Oracle XMLTYPE'

La mia ipotesi è che stai passando l'XML come letterale all'istruzione di inserimento. SQL di Oracle può gestire solo fino a 4000 caratteri in un letterale. Altrimenti devi usare le variabili bind e passarlo in blocchi. Oppure puoi usare PL/SQL.

Ad esempio, questo dovrebbe funzionare senza problemi perché il letterale

<MyMessage>Meeesaaagee</MyMessage> 

è di soli 34 caratteri:

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;

Ma se avessi:Meeesaaagee (+ 3976 caratteri extra)

Otterrai ORA-01704:stringa letterale errore troppo lungo.

Potresti provare:

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;
/

Fallo senza codice PL/SQL e per utilizzare le variabili di collegamento, dovresti parlare con uno sviluppatore di applicazioni. È al di fuori di Oracle (e al di fuori della mia conoscenza).