sql >> データベース >  >> RDS >> Oracle

BLOB列のテキストを置き換える

    REPLACE 次のデータ型で機能します:

    search_stringとreplacement_stringの両方、およびcharは、任意のデータ型CHARにすることができます。 、VARCHAR2NCHARNVARCHAR2CLOB 、またはNCLOB

    文字データをバイトのコレクション(BLOB)として格納することを選択しました。 BLOBにはコンテキストがなく、非常に大きな数しかないため、これらを直接処理することはできません。 あなたなしでは文字に変換できません 入力:バイナリデータをテキストに変換するには、その文字セットが必要です。

    関数REPLACEをコーディングする必要があります 自分で(DBMS_LOB.instrを使用 たとえば)またはデータを実行可能なCLOBに変換し、CLOBで標準関数を使用します。

    列のデータ型を変更することを強くお勧めします。これにより、将来発生する可能性のある文字セット変換エラーを防ぐことができます。

    本当にblobを操作したい場合は、次のような関数を使用してください。

    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. postgresql配列を行にアンラップします

    2. phpMyAdminを使用してデータベースをインポートする方法

    3. 使用されているMySQL構成ファイルを特定します

    4. MySQLで重複レコードを見つける方法