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