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


18

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

回答:


11

アルン、

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 checkout 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の方が適している可能性があります。

ロナルド。


8

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

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

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

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

最も簡単な例では、UTL_FILEを使用したファイルエクスポートは、FOPENへの呼び出し、PUT_LINEへの1つ以上の呼び出し、およびFCLOSEへの呼び出しで構成さます。


4

パフォーマンスが懸念される場合は、ベンダーのツールを検討することをお勧めします。

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


3

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を書いたときにこのアプローチを使用しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.