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

sqlldrを使用して画像をblob列にロードする方法

    私は通常、SQL*Loaderを使用してBLOBデータをロードするために別の方法を使用します。基本的に、ファイル名を含むテキストファイルをインポートし、制御ファイルで、実際のコンテンツがlobfileからのものであることをSQL*Loaderに通知します。

    あなたの場合、これは、jpgのファイル名(のみ)を含むテキストファイルを作成する必要があることを意味します。制御ファイルは次のようになります。

    LOAD DATA
    infile data.txt
    TRUNCATE
    INTO TABLE per_images
    FIELDS TERMINATED BY ',' TRAILING NULLCOLS
    (
      input_file FILLER,
      image_id "PER_IMAGES_s.nextval",  
      parent_id constant 6598,
      table_name constant "PER_PEOPLE_F",  
      image lobfile(input_file) terminated by eof
    )
    

    入力ファイルdata.txt その場合、次のようになります:

    0211664.jpg
    

    image lobfile ...が重要です 一部は最後にあり、定数定義は制御ファイルの最初にあります。

    この種のアプローチを使用することは、入力ファイルのサイズを知る必要がなく、SQL * Loaderを実行して複数の画像をロードできるため、私にははるかに簡単に思えます。大量の写真。

    複数の画像をロードする場合、入力ファイルには、これまでに指定した定数値が制御ファイル内に含まれている必要があります。次の入力ファイルを取ります:

    6598,PER_PEOPLE_F,0211664.jpg
    6599,PER_PEOPLE_F,0123456.jpg
    6600,PER_PEOPLE_X,0987654.jpg
    

    次に、1つの制御ファイルで3つの画像すべてをロードできます。

    LOAD DATA
    infile data.txt
    TRUNCATE
    INTO TABLE per_images
    FIELDS TERMINATED BY ',' TRAILING NULLCOLS
    (
      parent_id,
      table_name,
      input_file FILLER,
      image_id "PER_IMAGES_s.nextval",  
      image lobfile(input_file) terminated by eof
    )
    

    制御ファイルは変更されず、data.txtの内容のみが変更されます。 ファイル。

    raw(9529)の場合、元の制御ファイルは私のために機能します 完全に削除されます:

    options (bindsize 9529)
    load data
    infile 0211664.jpg "fix 9529"
    append
    into table PER_IMAGES
    (
      image,
      parent_id constant 6598,
      table_name constant "PER_PEOPLE_F",
      image_id "PER_IMAGES_s.nextval"
    )
    



    1. パフォーマンスのためのPostgreSQLでのテーブルインデックス

    2. MySQLで動的ピボットテーブルを作成する方法

    3. Amazon Aurora、Amazon RDS、およびClusterControlのフェイルオーバー時間の比較

    4. Oracleでパラメータとしてテーブル名を渡すことは可能ですか?