Oracle
 sql >> база данни >  >> RDS >> Oracle

Замяна на текст в колона BLOB

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Филтър за месец и година на CriteriaQuery

  2. Конкатениране на колона от група в R

  3. Документация на MAA за Oracle Cloud

  4. MySQL COALESCE и NULLIF функция

  5. Показване на съобщения в модалния прозорец във формуляри на Oracle с помощта на Show_Alert