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

Mengganti teks dalam Kolom BLOB

REPLACE bekerja pada tipe data berikut:

Search_string dan replacement_string, serta char, dapat berupa tipe data apa pun CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB , atau NCLOB .

Anda telah memilih untuk menyimpan data karakter sebagai kumpulan byte (BLOB). Ini tidak dapat dikerjakan secara langsung karena BLOB tidak memiliki konteks dan hanya merupakan angka yang sangat sangat besar. Itu tidak dapat dikonversi ke karakter tanpa Anda input:Anda memerlukan set karakternya untuk mengonversi data biner menjadi teks.

Anda harus mengkodekan fungsi REPLACE sendiri (menggunakan DBMS_LOB.instr misalnya) atau ubah data Anda menjadi CLOB yang bisa diterapkan dan gunakan fungsi standar pada CLOB.

Saya sangat menyarankan untuk mengubah tipe data kolom Anda. Ini akan mencegah kesalahan konversi kumpulan karakter lebih lanjut yang kemungkinan akan Anda alami di masa mendatang.

Jika Anda benar-benar ingin bekerja dengan gumpalan, gunakan fungsi seperti ini:

SQL> CREATE OR REPLACE FUNCTION convert_to_clob(l_blob BLOB) RETURN CLOB IS
  2     l_clob         CLOB;
  3     l_dest_offset  NUMBER := 1;
  4     l_src_offset   NUMBER := 1;
  5     l_lang_context NUMBER := dbms_lob.default_lang_ctx;
  6     l_warning      NUMBER;
  7  BEGIN
  8     dbms_lob.createtemporary(l_clob, TRUE);
  9     dbms_lob.converttoclob(dest_lob     => l_clob,
 10                            src_blob     => l_blob,
 11                            amount       => dbms_lob.lobmaxsize,
 12                            dest_offset  => l_dest_offset,
 13                            src_offset   => l_src_offset,
 14                            blob_csid    => nls_charset_id('AL32UTF8'),
 15                            lang_context => l_lang_context,
 16                            warning      => l_warning);
 17     RETURN l_clob;
 18  END convert_to_clob;
 19  /

Function created

SQL> CREATE OR REPLACE FUNCTION convert_to_blob(l_clob CLOB) RETURN BLOB IS
  2     l_blob         BLOB;
  3     l_dest_offset  NUMBER := 1;
  4     l_src_offset   NUMBER := 1;
  5     l_lang_context NUMBER := dbms_lob.default_lang_ctx;
  6     l_warning      NUMBER;
  7  BEGIN
  8     dbms_lob.createtemporary(l_blob, TRUE);
  9     dbms_lob.converttoblob(dest_lob     => l_blob,
 10                            src_clob     => l_clob,
 11                            amount       => dbms_lob.lobmaxsize,
 12                            dest_offset  => l_dest_offset,
 13                            src_offset   => l_src_offset,
 14                            blob_csid    => nls_charset_id('AL32UTF8'),
 15                            lang_context => l_lang_context,
 16                            warning      => l_warning);
 17     RETURN l_blob;
 18  END convert_to_blob;
 19  /

Function created

Anda dapat memanggil fungsi-fungsi ini langsung dari SQL:

SQL> UPDATE ape1_item_version
  2     SET DYNAMIC_DATA = convert_to_blob(
  3                          REPLACE(convert_to_clob(DYNAMIC_DATA),
  4                                 'Single period',
  5                                 'Single period period set1')
  6                          )
  7   WHERE NAME = 'PRIT ALL POOL for Duration Telephony 10_NA_G_V_H_N_Z2';

1 row updated


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Cara Menaikkan Pengecualian di PL/SQL?

  2. Langkah demi Langkah R12.2.6 Instalasi EBS di Virtual Box Bagian -2

  3. Fungsi NVL2 di Oracle

  4. Kembalikan baris dengan nilai maksimal satu kolom per grup

  5. Jenis TABEL atau VARRAY anonim di Oracle