REPLACE
работи със следните типове данни:
Както search_string, така и replacement_string, както и char, могат да бъдат всеки от типовете данни
CHAR
,VARCHAR2
,NCHAR
,NVARCHAR2
,CLOB
илиNCLOB
.
Избрали сте да съхранявате символни данни като колекция от байтове (BLOB). С тях не може да се работи директно, защото BLOB няма контекст и е само много много голямо число. Не може да се преобразува в знаци без вашите вход:имате нужда от неговия набор от знаци, за да конвертирате двоични данни в текст.
Ще трябва или да кодирате функцията REPLACE
себе си (използвайки DBMS_LOB.instr
например) или преобразувайте данните си в работещ CLOB и използвайте стандартни функции на CLOB.
Бих посъветвал силно да промените типа данни на вашата колона. Това ще предотврати всяка по-нататъшна грешка при преобразуване на набор от знаци, с която вероятно ще се сблъскате в бъдеще.
Ако наистина искате да работите с петна, използвайте функции като тези:
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
Можете да извикате тези функции директно от 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