web-dev-qa-db-ja.com

Oracleデータベーステーブルをcsvファイルにアンロードするにはどうすればよいですか?

Oracle 11gリリース1データベースから特定のデータを取得して、1つ以上のCSVファイルとして提供する必要があります。データは複数のテーブルやビューに存在します。これはすべてコマンドラインで機能するはずです。これに対する最善のアプローチは何でしょうか?

18
aPhilRa

アルン、

sqlclは次の場所から入手できます Oracle SQL Developer 4.1 EA2(4.1.0.18.37) 古くて有名なsqlplusと同じように使用できます。 sqlclにはcsvの出力形式設定があります

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

sqlclチェックアウトの詳細については Krisのブログ

sqlclが最も簡単になる前に、これはAPEXを使用してレポートをcsvにエクスポートすることでした。プレーンな古いsqlplusでは、これを使用してこれを行うことができます

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

これは、結果がアプリケーションサーバーまたはクライアントに書き込まれる場合に最適です。データベースサーバーに書き込む必要がある場合は、utl_fileの方が適している場合があります。

ロナルド。

11
ik_zelf

組み込みの TL_FILE パッケージを確認する必要があります。使用方法はいくつかあります。

  1. UTL_FILEパッケージを使用して任意の数のファイルに書き込むパッケージに、任意の数のプロシージャを書き込むことができます。これらのプロシージャは、SQL * Plusを含むほとんどすべてのアプリケーションから呼び出すことができます。

  2. コマンドラインで@scriptnameを指定して、同じ作業を行うPL/SQLスクリプトを記述し、SQL * Plusコマンドライン自体からスクリプトを呼び出すことができます。

  3. UTL_FILEを使用してブロックをSQL * Plusに直接貼り付けることもできますが、これは1回のエクスポートでのみ使用する必要があり、それでも最適なルートではない場合があります。

最も単純な場合、UTL_FILEを使用したファイルエクスポートは、 [〜#〜] fopen [〜#〜] への呼び出し、 PUT_LINE への1回以上の呼び出し、および [〜#〜] fclose [〜#〜] を呼び出します。

8
Leigh Riffel

パフォーマンスが問題になる場合は、ベンダーのツールを検討することをお勧めします。

BMC、Wisdomforce、CoSort、DBCraneのツールを評価しました。これらはすべて、spool、utl_file、または外部テーブルよりも大幅に高速です。 DBCrane を使用しているのは、上司がライセンスにあまりお金をかけたくなかったからです。

4
Lei

Pythonおよびcx_Oracleモジュールを使用して、CSV形式でディスクにデータを抽出できます。

Cx_Oracleを使用してOracleに接続する方法は次のとおりです。

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

データをフェッチした後、Pythonリストをループして、データをCSV形式で保存できます。

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

TableHunter-For-Oracle を書いたときにこのアプローチを使用しました

3
Alex Buzunov