1

SELECT ステートメントのみを含む単純な SQL スクリプト ファイルがあります。しかし、SELECT ステートメントの出力は膨大です (数十万行以上)。

出力をローカル ファイルに保存できません。select ステートメントを DESC に変更したところ、問題なく動作したので、問題は出力のサイズのようです (select ステートメントは SELECT * from TABLEX のようなものです)。

selectステートメントの実行方法に関するコメントをいただければ幸いです..

前もって感謝します


以下のようにSQLスクリプトファイルを更新しました

SET SQLBLANKLINES ON
set echo off  
set feedback off  
set linesize 1000  
set pagesize 0  
set sqlprompt ''  
set trimspool on  
set headsep off  

spool output.csv  
select * from JM_WCEL_BTH_CURRENT  
SPOOL OFF  
EXIT

出力は以下のとおりです

D:\>sqlplus user/user@mydb @2.sql

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jan 17 10:10:15 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options

  4
  5
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64
bit Production
With the Partitioning, Data Mining and Real Application Testing options

D:\>

出力ファイルには番号 4 と 5 しかありません。数分後に Ctrl + C を押してプロセスを終了しました。また、スプール プロセスを削除しようとしましたが、コンソールにも出力がありません。

他のツールから sql クエリを実行しようとしましたが、1 秒もかからずに結果が得られました。

助言がありますか?

ありがとう

4

2 に答える 2

1

次のようなものを使用して、SQL*Plus を使用して 6000 万行を csv ファイルにスプールすることに成功しました。

set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off

spool output.csv

select 'col1,col2,col3' from dual;

select col1 || ',' || col2 || ',' || col3
from bigtable;

spool off

非常に長時間実行されるクエリで発生する可能性のある問題の 1 つは、Oracle セッションのタイムアウト、または TCP 接続がファイアウォールによって破壊されることです。クエリが何時間も実行される場合は、おそらくこれらの問題を調べる必要があります。

于 2013-01-16T07:25:50.633 に答える