REPLACE
werkt op de volgende datatypes:
Zowel search_string en replacement_string, evenals char, kunnen elk van de gegevenstypen zijn CHAR
, VARCHAR2
, NCHAR
, NVARCHAR2
, CLOB
, of NCLOB
.
U heeft ervoor gekozen om tekengegevens op te slaan als een verzameling bytes (BLOB). Hier kan niet direct aan gewerkt worden omdat een BLOB geen context heeft en maar een heel erg groot aantal is. Het kan niet worden geconverteerd naar tekens zonder uw invoer:je hebt de tekenset nodig om binaire gegevens naar tekst te converteren.
Je moet ofwel de functie coderen REPLACE
jezelf (met behulp van DBMS_LOB.instr
bijvoorbeeld) of converteer uw gegevens naar een werkbare CLOB en gebruik standaardfuncties op de CLOB.
Ik zou sterk adviseren om het datatype van uw kolom te wijzigen. Dit voorkomt verdere conversiefouten in de tekenset die u in de toekomst waarschijnlijk zult tegenkomen.
Als je echt met blobs wilt werken, gebruik dan functies als deze:
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
U kunt deze functies rechtstreeks vanuit SQL aanroepen:
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