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

KESALAHAN pada baris 191:ORA-01489:hasil rangkaian string terlalu panjang

VARCHAR2 dibatasi hingga 4000 byte. Jika Anda mendapatkan kesalahan ini

Maka cukup jelas bahwa penggabungan melebihi 4000 byte.

Sekarang apa yang harus dilakukan ?

Solusi pertama Anda untuk menggunakan CLOB sudah benar.

select TO_CLOB(a)|| TO_CLOB(b)|| TO_CLOB(c) || TO_CLOB(d) 

Sepertinya masalah Anda yang sebenarnya adalah menyimpan ke file

Meskipun Anda tidak memposting cara menyimpan gumpalan yang dihasilkan ke file, saya yakin Anda tidak melakukannya dengan benar. Jika Anda mencoba menyimpan ke file dengan cara yang sama seperti yang Anda lakukan dengan VARCHAR2, Anda salah melakukannya.

Anda harus terlebih dahulu menggunakan dbms_lob.read untuk membaca clob dari database, lalu gunakan utl_file.put_raw untuk menulis ke file.

DECLARE
    position NUMBER := 1;
    byte_length NUMBER := 32760;
    length NUMBER;
    vblob BLOB;
    rawlob RAW(32760);
    temp NUMBER;
    output utl_file.file_type;
BEGIN
    -- Last parameter is maximum number of bytes returned.
    -- wb stands for write byte mode
    output := utl_file.fopen('DIR', 'filename', 'wb', 32760);

    position := 1;
    select dbms_lob.getlength(yourLob)
    into len
    from somewhere
    where something;

    temp := length;

    select yourLob
    into vlob
    from somewhere
    where something;

    IF len < 32760 THEN
        utl_file.put_raw(output, vblob);
        -- Don't forget to flush
        utl_file.fflush(output);
    ELSE -- write part by part
        WHILE position < len AND byte_length > 0
        LOOP
           dbms_lob.read(vblob, byte_length, position, rawlob);

           utl_file.put_raw(output,rawlob);

           -- You must admit, you would have forgot to flush.
           utl_file.fflush(output); 

           position := position + byte_length;

           -- set the end position if less than 32000 bytes
           temp := temp - bytelen;
           IF temp < 32760 THEN
               byte_length := temp;
           END IF;
    END IF;
END;


  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 Mendaftar Semua Tabel di Oracle

  2. Nama Kolom diawali dengan angka?

  3. Waktu pembukaan koneksi SQL yang sangat lama

  4. Gunakan database Oracle dengan otentikasi formulir dalam aplikasi MVC3

  5. (PLSQL) Apa ekspresi paling sederhana untuk menguji nilai yang diubah dalam pemicu pembaruan Oracle?