• ベストアンサー

PL/SQLをWindowsのBATファイルで実行するには

いつも参考にさせていただいております。 表題のとおり、WindowsServer2003上でBATファイルを起動したいのですが、うまくいきません。 BATファイルの中身 sqlplus USER_A/USER_A @DB_A @SQLPAT sqlplus USER_B/USER_B @DB_B @SQLPAT SQLPATファイルは、大体以下の感じで、2つのスキーマーで同じPL/SQLを実行します。 Declare ・ カーソルループ 更新 ・ ・ END; タスクにBATファイルを登録し実行すると 最初のPL/SQLは実行されますが、次のUSER_Bが実行されません。 どなたか詳しい方ご教授をお願いできませんでしょうか? オラクルのVerは9iです。よろしくお願い致します。

  • Oracle
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • investyou
  • ベストアンサー率23% (13/56)
回答No.2

pl_sqlは予めDBに登録しておく。 CREATE OR REPLACE PROCEDURE pl_hoge() IS ・・・ BEGIN ・・・ END; / ■hoge.bat sqlplus user/pass@dbname @hoge.sql ■hoge.sql SET serveroutput ON; BEGIN pl_hoge(); END; / exit; 1さんはhoge.sql最後のexit;を指摘してます。 私もそれと疑いますが。

kotton28
質問者

お礼

ありがとうございます。 まさにそれで解決しました!

その他の回答 (1)

回答No.1

PL/SQLスクリプトの最後に、SQLPLUSを脱出するための EXITが必要かと思います。 現状は、最初のSQLPLUSを起動して、実行後に、プロンプトを 出して止まっているんじゃないでしょうか。 スクリプトの最後に、EXITなる一行が書かれていれば、 途中でエラーにならない限り、プロンプトで止まることは ないはずです。 エラーが出ると止まるので、それも考慮するなら、さらに、 ひと工夫必要かと思いますが。(本題からそれるので割愛します)

関連するQ&A

  • shからPL/SQLブロックを実行する方法

    Solaris上でshスクリプト中からPL/SQLを記述したファイルを呼び出して、Oracleのテーブルに対して操作したいのですが、 test.shファイル #/bin/sh sqlplus userid/password@ddzk test.sqlファイル DECLARE … BEGIN INSERT INTO table VALUES( …  ) END; / コマンドラインから $./test.sh を実行すると、 ./test.sh: sqlplus: 見つかりません。 と表示されます。 どなたかshスクリプトからPL/SQLで記述したファイルを実行する 方法をご存知の方、ご教示願います。

  • SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

    SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。 イメージ sqlplus scott/tiger << EOF   declare     aaa number;   begin     -- *1     select col1 into aaa from test1;   end;   /   -- *2   define a=1   define b=1   @test.sql EOF ここで*1にて例えば複数行が返ってくるなどのエラーが 発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが どのようにすればよいかわかりますでしょうか。 whenever sqlerror exit 255 などはPL/SQL内の論理エラーはハンドリングしてくれないようです。 よろしくお願いします。 それかdefineや@マーク指定によるsqlファイルの取り込みを PL/SQLの中で実行できる方法を教えていただく方法でも 当方が実施したいことはできるのでそれでもかまいません。

  • VBScriptでSQLファイルの実行

    WSHShell.Runにて、SQL*Plus経由でXXX.sql(内部でストアドプロシージャをコールします)を実行し、ログも出力したいのですが、以下のコマンドをRunに指定すると、sqlplusより返ってこなくなってしまいます。 コマンドプロンプトで実行する分には、正常に終了するのですが・・・。 何が悪いのかわかりません。。 sqlplus -s ユーザー/パスワード@ホスト名 @C:\temp\XXX.sql > C:\temp\XXX.log 代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。 わかる方いらっしゃいましたらご教授願います。 ちなみに、コマンド部分をbatファイルにしてそのbatファイルをVBSでコールすることは可能でした。

  • plファイルの中で他のplファイルを実行

    A.plファイルとそれに付随するpmファイルがあります。 別のB.plでA.plに値を渡しながらループさせてA.plを実行し得られた値をB.plに返すことがしたいのですが、 B.plで ループ始点 require('A.pl'); ループ終点 だと一回きりの実行結果しか得られず。 #`perl A.pl @AAA`; だとreturnできずエラー となってしまいます。 何か良い方法は無いでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • pl/sqlでのautotraceについて

    PL/SQLの実行計画を取得したいのですが、autotraceを指定しても その結果が表示されません。結果表示のためにはsqlplusと違った 考慮が必要なのでしょうか。oracleに詳しい方、教えてください。 よろしくお願い致します。

  • PL/SQLで実行したSQLのログの取得について

    ASP(ActiveServerPage)より、PL/SQLのFunctionを実行し、Oracleの複数のTABLEを更新しようとしています。 ASPから実行する際には、引数を渡し、その引数をSQL実行の条件としていますが、実際に実行されたSQL文のログを取得したいのですが、どうしたらよいでしょうか? 何か良い方法をお教えいただけますよう、よろしくお願いいたします。 [実行環境] DB:Oracle8i

  • 複数のsqlファイルを実行するスクリプト

    シェルスクリプトで特定のディレクトリ配下にあるsqlファイルを実行したいのですが、 どのようにすればいいのでしょうか? 今まではsqlファイルが決まっていた為、明示的にファイルを指定出来たのですが、ファイル名が固定でなくなった 為、悩んでいます。 以前は以下のような形で行っていました。 ----------------------------------------- #!/bin/sh #sqlplusでDB接続 sqlplus /nolog <<EOF conn USER (パスワード入力) #ユーザ確認 show user #sql実行 @/home/hoge/sql_01 @/home/hoge/sql_02 @/home/hoge/sql_03 commit; exit EOF ---------------------------------- ここでsql実行したいファイルの特定のディレクトリ配下にある全てのsqlファイル にして実行するようにしたいです。 もし、分かる方いれば教えてください。 よろしくお願いします。

  • batファイルのようにSQLを実行

    WindowsでMySQLを使用しています。 数十個のSQLを繰り返し発行したいのですが、題名の通りbatファイルのように、おのおののSQLコマンドを一個の実行ファイルにし、ダブルクリックで実行できませんか。 お願いいたします。

    • ベストアンサー
    • MySQL
  • PL/SQLの結果が違う

    乱筆で申し訳ありませんが、困っています。 Windowsタスクマネジャーで時間指定で起動すると PL/SQLの結果がn倍の結果になってしまいます。 どなたか原因の糸口になるような情報を教えてください。 現象:  ・単体(SQLPlusなど)で実行した場合は起こりません。  ・タスクを即実行した場合も起こりません。  ・タスクマネージャーから時間指定で起動した時のみ起こります。    PL/SQLの内容:  TBLAのデータを条件で合計し結果を、TBLBへ出力するものです。 タスク登録:  batファイルを作成し、PL/SQLを起動しています

  • bashで実行したsqlの実行結果の戻り値

    bashで実行したsqlの実行結果の戻り値 bashを使用して、DB間の通信の監視を行なおうとしております shellの内容はサーバAでoracleに接続(sqlplus)して、 そこからサーバBへ接続(connect)するだけの記述です。 この時、 MSG=`sqlplus ID/PASSWORD@SID @connect.sql` echo XXX で、@connect.sqlの実行結果を戻り値としてechoさせたいのですが、 この場合、どのように指定すればよいのでしょうか? (上記の状態でshellを実行すると、connect側ではなく、 sqlplusの戻り値が戻ってきてしまいます) ※conenct.sql connect 接続先DBのID/PASSWORD@接続先 exit だけのsqlで、こちらの接続確認は取れております