Tôi đoán là bạn đang chuyển XML dưới dạng một chữ vào câu lệnh chèn. SQL của Oracle chỉ có thể xử lý tối đa 4000 ký tự trong một nghĩa đen. Nếu không, bạn cần sử dụng các biến liên kết và chuyển nó thành nhiều phần. Hoặc bạn có thể sử dụng PL / SQL.
Ví dụ:điều này sẽ hoạt động mà không có vấn đề gì vì chữ
<MyMessage>Meeesaaagee</MyMessage>
chỉ có 34 ký tự:
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;
Nhưng nếu bạn có:Meeesaaagee (+ 3976 ký tự phụ)
Bạn sẽ gặp lỗi ORA-01704:string quá dài.
Bạn có thể thử:
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;
/
Làm điều đó với mã PL / SQL và để sử dụng các biến liên kết, bạn sẽ phải nói chuyện với một nhà phát triển ứng dụng. Nó nằm ngoài Oracle (và ngoài tầm hiểu biết của tôi).