Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Thay thế văn bản trong một cột BLOB

REPLACE hoạt động trên các kiểu dữ liệu sau:

Cả search_string và Replace_string, cũng như char, đều có thể là bất kỳ kiểu dữ liệu nào CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB hoặc NCLOB .

Bạn đã chọn lưu trữ dữ liệu ký tự dưới dạng tập hợp các byte (BLOB). Những điều này không thể được thực hiện trực tiếp bởi vì BLOB không có bối cảnh và chỉ là một con số rất lớn. Nó không thể được chuyển đổi thành các ký tự mà không có của bạn input:bạn cần bộ ký tự của nó để chuyển đổi dữ liệu nhị phân thành văn bản.

Bạn sẽ phải viết mã hàm REPLACE bản thân bạn (sử dụng DBMS_LOB.instr chẳng hạn) hoặc chuyển đổi dữ liệu của bạn thành CLOB khả thi và sử dụng các chức năng tiêu chuẩn trên CLOB.

Tôi thực sự khuyên bạn nên thay đổi kiểu dữ liệu của cột của bạn. Điều này sẽ ngăn chặn bất kỳ lỗi chuyển đổi bộ ký tự nào khác mà bạn có thể gặp phải trong tương lai.

Nếu bạn thực sự muốn làm việc với các đốm màu, hãy sử dụng các chức năng như sau:

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

Bạn có thể gọi các hàm này trực tiếp từ 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. SQL Tham gia trên các giá trị null

  2. pivot table Oracle - cách thay đổi các mục hàng thành cột

  3. Sự khác biệt giữa hàm RANK () và DENSE_RANK () trong oracle là gì?

  4. Cách kết nối từ xa với cơ sở dữ liệu Oracle 11g

  5. Hàm SUBSTR () trong Oracle