2017-09-25 10 views
0

約300万のデータを含むテーブルからデータをエクスポートする必要があります。表には9列があり、次の形式である:大量の日付をOracleからcsvディスクリプションにスプールする

Source | Num | User | Offer | Simul | Start_Date | End_Date | Label | Value 
coms p | 0012| plin | synth | null | 04-JAN-15 | 31-JAN-15| page v | 8 

しかし、私はメモ帳+ +を使用してcsvファイルを開封しておりますわずか約600 000行が表示され、次のように表示されたとき:

coms p          ,12,plin           ,synth                        ,                         ,04/01/2015 00:00:00,04/01/2015 00:00:00,page v                                 
8 

あなたが見ることができるように、いくつかのフィールドにはテーブルのフィールドに何もないのに多くのスペースがあり、Numフィールドの0012値は12と表示され、最後のフィールドは別のラインに表示されます。

さらに、テーブルの2行の間にcsvに空白行があります。

これらの無駄なスペースを消す方法やcsvの行全体を1行に表示する方法、Numフィールドに00を表示させる方法、そして600 000しかないのはなぜですかNotepad ++に表示されていますか?私はcsvファイルの行制限がないことを読んだ。

私が使用していたSQLは以下の通りです:

SET SQLFORMAT csv 
SET HEAD OFF 

spool /d:/applis/test/file.csv 

select * from TEST; 

spool off; 
+1

これは何を実行していますか? SQL Developer、TOAD、SQL * Plus?そしてどのバージョン?違いがあります - 'SET SQLFORMAT csv'は標準オプションではありません。 – kfinity

答えて

0

それが原因で、データベース内の列の長さであるかもしれません。 データベース内のソース列の長さが50であると仮定すると、ファイル内の長さは50文字です。

は、としてクエリでtrimouttrimspoolをお試しください:

SET TRIMOUT ON 

SET TRIMSPOOL ON 
+0

はい私はあなたが正しいと思います。最初の列は確かに50バイトです。しかし、notepad ++でcsvを開くと、600,000行しか表示されないのはなぜですか?この表には約300万行が含まれています。 – tabby

+0

私はそれの背後にある理由を見つけることができればそれについてはわかりません。 –

+0

SET AUTOTRACE ONを使用して、テーブルからのすべてのレコードを処理しているか、600000レコードしか処理していないかを確認できます –

1

まず、あなたがSQL DeveloperTOADを使用している場合はCSVをエクスポートする方がはるかに簡単な方法があります。

しかし、SQL * Plusでは、set linesize 32000を使用して、すべての列を1行に表示することができ、set pagesize 0は最初のCRLFを削除します。しかし、これはスプール出力の仕組みであるため、列を固定幅形式で表示しています。

可変幅の列を使用する場合、最も移植性の高い標準化された方法は、手動で列を連結し、select *を使用しないことです。

set linesize 32000 -- print as much as possible on each line 
set trimspool on -- don't pad lines with blank spaces 
set pagesize 0  -- don't print blank lines between some rows 
set termout off -- just print to spool file, not console (faster) 
set echo off  -- don't echo commands to output 

set feedback on -- just for troubleshooting; will print the rowcount at the end of the file 

spool /d:/applis/test/file.csv 
select col1 || ',' || col2 || ',' || col3 from TEST; 
spool off 
関連する問題