Dugaan saya adalah Anda meneruskan XML sebagai literal ke pernyataan insert. SQL Oracle hanya dapat menangani hingga 4000 karakter secara literal. Kalau tidak, Anda perlu menggunakan variabel bind dan meneruskannya dalam potongan. Atau Anda dapat menggunakan PL/SQL.
Misalnya, ini harus bekerja tanpa masalah karena literal
<MyMessage>Meeesaaagee</MyMessage>
hanya 34 karakter:
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;
Tetapi jika Anda memiliki:Meeesaaagee (+ 3976 karakter tambahan)
Anda akan mendapatkan kesalahan ORA-01704:string literal too long.
Anda dapat mencoba:
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;
/
Lakukan tanpa kode PL/SQL dan untuk menggunakan variabel bind, Anda harus berbicara dengan pengembang aplikasi. Itu di luar Oracle (dan di luar pengetahuan saya).