Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01704:chuỗi ký tự quá dài 'Lỗi khi chèn tài liệu XML trong kiểu cột Oracle XMLTYPE'

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cài đặt và cấu hình OCI8 để kết nối oracle với php

  2. Câu lệnh SQL để hiển thị số bằng chữ mà không cần sử dụng bất kỳ hàm trực tiếp nào (oracle)

  3. số hàng tăng lên khi giá trị của trường thay đổi trong Oracle

  4. Nội dung trình tự RAC

  5. Oracle TO_DATE với chỉ nhập thời gian sẽ thêm thành phần ngày tháng dựa trên logic gì?