Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-01704:string literal terlalu panjang 'Kesalahan saat memasukkan dokumen XML dalam tipe kolom Oracle XMLTYPE'

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatasi ORA-02014:tidak dapat memilih UNTUK PEMBARUAN dari tampilan dengan DISTINCT, GROUP BY, dll

  2. Cara PLAY_SOUND di Oracle Forms

  3. .patch_storage

  4. Bagaimana saya bisa membuat formulir penyisipan/pembaruan untuk beberapa tabel di Oracle Apex 5.1.4

  5. TEMPFILE Offline Fisik Siaga