• ベストアンサー

SQL実行結果取得

バッチファイルにて、 sqlplusコマンドにより*.sqlファイルを実行し、 SQL文を発行していますが、 実行結果(処理件数)をコマンドプロンプト上 に表示したいのですが、どなたか。手法をご存知では ないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

根本的に見直して、SQL*Loaderを使う方が良いんじゃないですかね。 パラメータファイル(5~6行)を書く必要がありますが、コマンド一つでロード可能です。 コミットも1万件ごとに発行可能ですし、インサートに失敗したデータも選別できます。 インサートの処理内容もログに書き出されるので、ログを解析すれば、目的は達成されるハズです。

その他の回答 (1)

  • kouta77
  • ベストアンサー率20% (185/896)
回答No.1

もう少し、詳しく書かないと分かりませんね。 バッチの実行はコマンドから?(Tera Term や TELNET?) 実行するのは問合せ? プロシージャー? まあ、PL/SQLなら、DBMS_OUTPUT.PUT_LINE を使うとか 問合せなら、SPOOL でログを取り、最後の何行かを実行後に出力するバッチにするとかですかね。

yagi-atlas
質問者

補足

ご回答ありがとうございます。 コマンドからです。 現状の仕様はバッチファイルを実行すると、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

関連するQ&A