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

BLOBOracle10gへの画像の挿入

    pl/sqlからローカルディレクトリにアクセスすることはできません。 bfileを使用する場合は、Oracleが実行されているサーバー上に、イメージを配置する必要のあるディレクトリ(ディレクトリの作成)を設定します。

    ローカルマシンから少数の画像を挿入する場合は、これを行うためにクライアント側のアプリが必要になります。あなたはあなた自身を書くことができます、しかし私は通常これのためにToadを使います。スキーマブラウザで、テーブルをクリックします。 [データ]タブをクリックし、+記号を押して行を追加します。 BLOB列をダブルクリックすると、ウィザードが開きます。左端のアイコンは画像をblobにロードします:

    SQLDeveloperにも同様の機能があります。以下の「ロード」リンクを参照してください:

    ワイヤを介してイメージをプルする必要がある場合は、pl / sqlを使用してプルできますが、簡単ではありません。まず、ACLリストへのアクセスを(セキュリティ上の理由から)設定して、ユーザーがネットワークを利用できるようにする必要があります。 ACLセットアップの詳細については、この記事を参照してください。

    ACLが完了していると仮定すると、次のように画像をプルします。

    declare
        l_url varchar2(4000) := 'http://www.oracleimg.com/us/assets/12_c_navbnr.jpg';
        l_http_request   UTL_HTTP.req;
        l_http_response  UTL_HTTP.resp;
        l_raw RAW(2000);
        l_blob BLOB;
    begin
       -- Important: setup ACL access list first!
    
        DBMS_LOB.createtemporary(l_blob, FALSE);
    
        l_http_request  := UTL_HTTP.begin_request(l_url);
        l_http_response := UTL_HTTP.get_response(l_http_request);
    
      -- Copy the response into the BLOB.
      BEGIN
        LOOP
          UTL_HTTP.read_raw(l_http_response, l_raw, 2000);
          DBMS_LOB.writeappend (l_blob, UTL_RAW.length(l_raw), l_raw);
        END LOOP;
      EXCEPTION
        WHEN UTL_HTTP.end_of_body THEN
          UTL_HTTP.end_response(l_http_response);
      END;
    
      insert into my_pics (pic_id, pic) values (102, l_blob);
      commit;
    
      DBMS_LOB.freetemporary(l_blob); 
    end;
    

    お役に立てば幸いです。



    1. スノーフレークスキーマ

    2. Oracle連結文字列と数値の例

    3. MySQLを使用した基本的なSQLクエリについて学ぶ

    4. OBJECTPROPERTY()を使用して、テーブルがSQLServerのシステムテーブルであるかどうかを確認します