REPLACE
bekerja pada tipe data berikut:
Search_string dan replacement_string, serta char, dapat berupa tipe data apa pun
CHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
, atauNCLOB
.
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