SQL*Plusの実行結果にSQL文も残したいです
SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか?
以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ
残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは
出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと
考えているのですが、何かよい方法はないものでしょうか?
[ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log
■環境
Red Hat Linux 4
Oracle10g
■以下test01.sqlの中身です。
---ここから--------------
create table ex01
(
c1 number,
c2 varchar2(10),
c3 varchar2(40)
);
insert into ex01(c1,c2,c3) values(1,'AA1','BBB1');
select * from ex01;
update ex01 set c2='aa1' where c1 =1;
select * from ex01;
exit;
---ここまで--------------
■以下ログファイルの中身です。
---ここから------------------
[ama@rh01 test]$ cat test01.log
省略
With the Partitioning, OLAP and Data Mining options
に接続されました。
←ここにcreate文を出力したいです。
表が作成されました。
←ここにinsert文を出力したいです。
1行が作成されました。
←ここにselect文を出力したいです。
C1 C2 C3
---------- ---------- ----------------------------------------
1 AA1 BBB1
←ここにupdate文を出力したいです。
1行が更新されました。
←ここにselect文を出力したいです。
C1 C2 C3
---------- ---------- ----------------------------------------
1 aa1 BBB1
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。
[ama@rh01 test]$
-------------------ここまで---------------
どなたか良いアドバイスいただけたらと思います。
どうぞよろしくお願いします。
補足
ご回答ありがとうございます。 コマンドからです。 現状の仕様はバッチファイルを実行すると、txtファイルよりパラメータを読み込み、INSERT文を作成し、最後に一括して実行するといったものになっています。 SPOOLしているのは、処理開始時刻と処理終了時刻をログファイルに出力するためです。 また、INSERT文1万件ごとにcommit文を挟むようにしています。 rem ログファイルパス set log_path=LOG.txt rem 開始時刻をログ出力 echo [開始時刻] >> %log_path% echo %time% >> %log_path% rem datファイル名 set dat_name=dat_1.dat rem READファイルパス set cmt_path=test.csv rem INSERT処理件数カウンタ set count=0 rem sql文の頭 echo set feedback off; > %dat_name% echo set verify off; >> %dat_name% echo spool %log_path% append; >> %dat_name% rem READファイルより一行づつデータを読み込みます。 For /F "tokens=* delims=" %%i in (%cmt_path%) Do Call :Sub %%i rem sql文のおしり echo spool off; >> %dat_name% echo commit; >> %dat_name% echo exit >> %dat_name% sqlplus -s */*@* < %dat_name% rem 完了時刻をログ出力 echo [完了時刻] >> %log_path% echo %time% >> %log_path% rem 処理件数をログ出力 echo [処理件数] >> %log_path% echo %count% >> %log_path% echo. echo 処理を終了しました。 echo. notepad %log_path% pause >nul goto :eof :Sub set DATA=%1 set word1=%DATA:~0,4% set word2=%DATA:~4,8% set word3=%DATA:~12,1% set word4=%DATA:~13,25% echo INSERT INTO *_DATA (t1,t2,t3,t4) VALUES(LPAD('%word1%',6,0),LPAD('%word2%',15,0),LPAD('%word3%',6,0),'%word4%'); >> %dat_name% rem datファイルに書き込んだINSERT文の数をカウントします。 set /a count=count+1 rem 一万件ごとにCOMMITを行うようにします。 set /a result=count%%10000 if %result%==0 goto label1 :else goto end :label1 echo commit; >> %dat_name% echo spool off; >> %dat_name% echo exit; >> %dat_name% sqlplus -s */*@* < %dat_name% set dat_name=dat_%count%.dat echo set feedback off; > %dat_name% echo set verify off; >> %dat_name% echo spool %log_path% append; >> %dat_name% :end goto :eof