0

実行時にSQLファイルを呼び出すバッチファイルがあります。このSQLファイルは、MYPeriodに保存するデータを入力するようにユーザーに促します(これは入力として日付を受け入れます)。SQLファイルの出力はCSVファイルです。SQLファイルのコードは次のとおりです。

PROMPT Enter a period
ACCEPT MYPeriod PROMPT 'Period: '

SET LINESIZE 500 FEEDBACK OFF TRIMSPOOL ON TERMOUT OFF HEAD OFF PAGESIZE 0 TERM OFF

spool E:\abc\Test\File1_&MYPeriod.csv

select Account || ',' || Membername || ',' || GROUP || ',' || FUTURE1  from ACTUAL_V@UAT1_Test where Key=21 and period_name= '&MYPeriod' ;
spool off
exit

私のクエリ:

  1. これを実行すると、場所 E:\abc\Test に File1_12-2012csv.Lst という名前のファイルが生成されます。csvファイルが欲しい。ファイル名をハードコーディングすると (&MYPeriod をテストで置き換えます) File1_Test.csv が完全に生成されます。ユーザーが入力した名前でコードがファイルを作成できないのはなぜですか?

  2. この出力では csv ファイルが作成され、db からアカウントが取得されますが、上部に 2 つの余分な行が出力されます。新しいクエリと古いクエリ。自動的に削除されるように、コードを再定義するにはどうすればよいですか。

あなたの助けに感謝します。

4

1 に答える 1

2

置換変数は、後続の文字と区切るために、オプションでピリオドで終了します。文字列でも使用する場合は、その終端を明示的に追加する必要があります。

spool E:\abc\Test\File1_&MYPeriod..csv

set verify off余分な 2 行の問題については、 ;を追加します。現時点ではon(デフォルトで) に設定されているため、使用する置換変数の古い値と新しい値が表示されます。


日付をファイル名に入れる唯一の方法は、最初に置換変数に入れることです。

set termout off
column x_run_dt new_value y_run_dt
select to_char(sysdate, 'YYYYMMDDHH24MISS') as x_run_dt from dual;
set termout on
spool E:\abc\Test\File1_&MYPeriod._&y_run_dt..csv

このnew_value句を使用すると、置換変数を作成できます。&y_run_dtこの場合は、問合せ対象の列の値を使用しますx_run_dt。その値を生成する select をset termout句の間にラップすると、スクリプトとして実行したときに通常の出力から隠されます。

于 2013-05-13T07:33:22.740 に答える