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

2000バイトまたは4000バイトより大きいBLOBテスト文字列を挿入します

    手始めに、LOBとは何かを理解する必要があります。これらは「大きなデータ」であり、Oracleの他のどのデータ型よりも大きい可能性があります。それらはファイルシステム上の通常のファイルのようなものです。ファイルシステム上のファイルに書き込むには、次のことを行う必要があります

    1. 書き込み用にファイルを開く
    2. 最初からファイルの入力を開始する場合は、ファイルを切り捨てます
    3. ソースデータをループ内のチャンクで読み取ります
    4. 同じループ内のファイルにデータチャンクを1つずつ追加します
    5. ファイルを閉じる

    多かれ少なかれ同じことがLOBにも当てはまります。テーブルでは、LOB(CLOB / BLOB / NCLOB)列は、実際のデータを保持するディスクストレージ上の別の場所への単なるポインター/参照です。 Oracleの標準用語では、ポインタは「LOBロケータ」と呼ばれます。する必要があります

    1. LOBロケーターを開く/初期化する
    2. 最初から入力を開始する場合は、LOBの内容を切り捨てます
    3. データチャンクをループ内のLOBコンテンツに1つずつ追加します
    4. LOBロケーターを閉じる

    PL / SQLでは、次のようになります。

    -- create table blob_test(id number, b blob);
    
    declare 
      v_b blob; 
      aaa raw(32767);
      longLine varchar2(32767);
    begin 
      longLine :=  LPAD('aaaa', 32767,'x');
      aaa := UTL_RAW.CAST_TO_RAW(longLine);
      insert into blob_test values(1,empty_blob()) returning b into v_b;
      dbms_lob.open(v_b,dbms_lob.lob_readwrite);
      dbms_lob.writeappend(v_b,UTL_RAW.LENGTH (aaa) ,aaa);
      dbms_lob.close(LOB_LOC=>v_b);
      commit;
    end;
    

    説明:

    1. LOBロケーターを初期化する=insert into blob_test values(1,empty_blob()) returning b into v_b;
    2. 書き込み用にLOBロケーターを開く=dbms_lob.open(v_b,dbms_lob.lob_readwrite);
    3. LOBの内容を最初から入力したい場合は、LOBの内容を切り捨てます...これはempty_blob()によって実行されます。 insertを呼び出します 。
    4. データチャンクをループ内のLOBコンテンツに1つずつ追加します=ここではdbms_lob.writeappend()を1回だけ繰り返します 、単一のチャンクのみを追加するaaa 長さutl_raw.length(aaa) (最大32767)LOB v_b
    5. LOBロケーターを閉じる=dbms_lob.close(LOB_LOC=>v_b);


    1. IPから国を決定する-IPv6

    2. MySQLからelasticsearchへのデータのリアルタイム移行?

    3. モジュールmysqlを使用してnodejsでmysqlの列を一覧表示する方法

    4. メソッドを含むデータベースクエリをチェックするためのテスト駆動開発