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

Oracle:blobを含むテーブルを.sqlファイルにエクスポートして、再度インポートできるようにします。

    これはSQLDeveloperでは不可能だと思います(ただし、あまり頻繁には使用しません)。

    私が使用しているSQLクライアント(SQL Workbench / J)はこれを実行できます。

    このデータをエクスポートする方法はいくつかあります。

    独自のスクリプトを生成する

    次のような特別な(ツール固有の)表記を使用して外部ファイルを参照するSQLスクリプトを作成できます。

    INSERT INTO images
      (name, data)
    VALUES
      ('foobar', {$blobfile='blob_r1_c2.data'});
    

    上記のステートメントは、SQLWorkbenchでのみ再度実行できます。他のSQLクライアントとは互換性がありません。

    utl_rawを使用

    もう1つの方法は、「blobリテラル」を使用することですが、Oracleでは文字リテラルの4000バイトに制限があるため、これは本当にの場合にのみ機能します。 小さなblob値:

    INSERT INTO images
      (name, data)
    VALUES
      ('foobar', to_blob(utl_raw.cast_to_raw('......')));
    

    ここで、cast_to_rawの文字リテラル 呼び出しには、BLOBの16進値が含まれます。これには「blobbyte」ごとに2文字が必要なため、2000バイトを超えるBLOBを処理することはできません。ただし、その構文は、ほぼすべてのOracle SQLツールで機能します(非常に長い行のスクリプトを処理できる場合)。

    SQL*Loader入力ファイル

    3番目の方法は、SQL*Loaderを使用してインポートできるテキストファイルにデータをエクスポートすることです。

    テキストファイルには次のようなものが含まれます:

    NAME    DATA
    foobar  blob_r1_c2.data
    

    次のSQL*Loader制御ファイルと一緒に:

    OPTIONS (skip=1)
    LOAD DATA CHARACTERSET 'WE8ISO8859P15'
    INFILE 'images.txt'
    APPEND
    INTO TABLE IMAGES
    FIELDS TERMINATED BY '\t' TRAILING NULLCOLS
    (
      NAME,
      lob_file_data FILLER,
      DATA LOBFILE(lob_file_data) TERMINATED BY EOF
    )
    
    >

    これはSQL*Loaderを使用してロードできるため、データをインポートするためにSQLWorkbenchは必要ありません。

    詳細はマニュアルにあります

    編集

    Alexがコメントで指摘しているように、DataPumpエクスポートを使用することもできますが、そのためにはサーバー上のファイルシステムにアクセスできる必要があります。上記のソリューションはすべて、データをクライアントに保存します。



    1. ナンバーシリーズジェネレータチャレンジソリューション–パート4

    2. MariaDBで特定の文字の前後のすべてを選択します

    3. DBCCCLONEDATABASEの用途の拡大

    4. count(*)とcount(column_name)、違いは何ですか?