REPLACE
funktioniert mit den folgenden Datentypen:
Sowohl Suchzeichenfolge als auch Ersatzzeichenfolge sowie Zeichen können alle Datentypen CHAR
sein , VARCHAR2
, NCHAR
, NVARCHAR2
, CLOB
, oder NCLOB
.
Sie haben sich entschieden, Zeichendaten als Sammlung von Bytes (BLOB) zu speichern. Diese können nicht direkt bearbeitet werden, da ein BLOB keinen Kontext hat und nur eine sehr sehr große Zahl ist. Es kann ohne Ihre nicht in Zeichen umgewandelt werden Eingabe:Sie benötigen ihren Zeichensatz, um Binärdaten in Text umzuwandeln.
Sie müssen entweder die Funktion REPLACE
codieren selbst (unter Verwendung von DBMS_LOB.instr
zum Beispiel) oder konvertieren Sie Ihre Daten in ein funktionierendes CLOB und verwenden Sie Standardfunktionen auf dem CLOB.
Ich würde dringend raten, den Datentyp Ihrer Spalte zu ändern. Dies wird jeden weiteren Zeichensatzkonvertierungsfehler verhindern, auf den Sie wahrscheinlich in Zukunft stoßen werden.
Wenn Sie wirklich mit Blobs arbeiten möchten, verwenden Sie Funktionen wie diese:
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
Sie können diese Funktionen direkt aus SQL heraus aufrufen:
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