• ベストアンサー

バッチからのSQLPlusの実行について

こんばんは。 現在、バッチジョブからSQLPlusを起動してSQLファイルの SQL文を実行して以下の処理をしたいと考えておりますが 技術敵には可能でしょうか? 1.3つのパラメータをユーザが入力 2.1つの値についてマスタを検索して存在しない場合はエラー。 3.2でマスタに存在した場合、パラメータで他のテーブルを更新。 現時点では入力されたパラメータで更新処理はできたのですが マスタをチェックして存在の有無の戻り値を取得して 処理を分岐するといったことができるのかよくわかりませんので どなたかご教授ください。

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

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

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

PL/SQLを使ってはいかがですか? accept para1 prompt パラメータ1入力して下さい accept para2 prompt パラメータ2入力して下さい accept para3 prompt パラメータ3入力して下さい declare cnt int; begin select count(*) into cnt from master1 where para1 = &para1; if cnt = 0 then DBMS_OUTPUT.PUT_LINE('para1はありません'); QUIT; end if; 'para2,para3もチェック・・・ただし省略 update TBL_A set para1 = &para1,set para2 = &para2 ・・・; end; 環境が無いので動作確認していません。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k22.htm

その他の回答 (1)

noname#33813
noname#33813
回答No.1

ストアドプロシージャーを使えば可能です。

関連するQ&A

  • バッチからのSQLPLUS実行について

    はじめまして。 SQLPLUSでご質問ををさせてください。 環境 OS:Win2003server Oracle:10g バッチから、以下のようにSQLを実行したいと考えています。 バッチファイル sqlplus ID/PASS@インスタンス名 @SQLファイル.sql SQLファイル.sql set trimsool on set pagesize 0 set linsize 2000 set feedback off set colsep ',' spool on spool ABC.txt select * from xxx; spool off exit; ご質問  バッチファイルからSQLファイル.sqlが呼ばれているのですが、  接続時にENTERキーを押下しないと、後続の処理が実行されません。  ENTERキー押下後のメッセージ内容が  「バージョン情報の表示や、接続されました。」と出力されているため、  接続時の処理と思われます。    上記でENTERキーを押下せずに、処理を実行させるためにはどうすればよろしいでしょうか。  初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • SQLをバッチで実行

    掲題の件で少し教えていただきたいことがあります。 バッチファイルでSQLPLUSを起動し、 @XXXXXXXXX.SQL >> XXX.log(バッチのログ)と 実行するのですが、このSQL文がインサート文や アップデート文など通常のSQL文だと バッチでのリダイレクションの結果に XX行作成されました。とかXX行更新されましたとか 出力されると思うのですが、 実行するSQL文の中でさらに、 @XXXXXXXXX.SQL と記述していると どのようにログファイルに出力されますか? XX行作成されました。とかXX行更新されましたとか が出るとうれしいのですが… わかりにくい質問かもしれませんがお願いいたします。

  • バッチより実行されるSQLについて

    あるバッチファイルからSQL文を実行します。 SQLの内容を簡単に申し上げますと テーブルAにレコードが1件存在したときは、 テーブルBを削除する。 テーブルAにレコードが2件存在したときは、 何もしない。 バッチファイルには、後続の処理もあるのですが 割愛します。 ここで質問なのですが、レコードが2件存在した とき、バッチの後続処理を実行させずに、そこで 処理終了とさせたいのですが、方法はあります でしょうか? SQL内でバッチのエラーレベルのようなものを 渡せたら、解決できそうなのですが、方法が わかりません。 説明があいまいでわかりにくいかもしれませんが 何か方法がありましたら、教えてください。

  • バッチからsqlplusの接続エラーの検知について

    バッチからsqlplusの接続エラーの検知について 環境:Xp、Oracle11g バッチからsqlpulusを起動してPL/SQLを動かしてるのですが DB接続に失敗した時に%ERRORLEVEL%では接続エラー時には 0が戻ってきてしまいエラーを検知できませんでした。 DB接続に失敗した場合、検知する方法を模索しております。 識者の方、助言を頂ければ幸いです。

  • 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で、こちらの接続確認は取れております

  • WindowsServer2008でタスク実行

    困っています。 Dドライブ直下にバッチファイルでSQLplusを起動させ、同じディレクトリにある.sqlを実行させるファイルがあります。 このバッチファイルを手動で起動させデータを取得しようとするとsqlplusが起動し上手く処理が行われるのですが、タスクスケジューラに登録すると一瞬コマンドプロンプトの画面が開きすぐに閉じてしまいsqlplusが起動せず処理が開始されません。 webで色々調べてみましたがバッチファイルの先頭に @ECHO OFF cd /D %~ dp0をつけても駄目でした。 タスクスケジューラから右クリックして実行を選んで処理させるとこのタスクのプロパティの履歴には操作が完了されました。とタスクが完了しました。と表示されています。 一体、どのようにしたらバッチファイルが動くようになるのでしょうか? どなたか教えてください。 タスクスケジューラに登録したバッチファイルの内容は @echo off cd /D %~ dp0 d: sqlplus ユーザ名/パスワード@ネットサービス名 @X.sql exit です。 以上、よろしくお願いいたします。

  • windowsでのsqlplusについて

    環境:2000Server、Oracle8i やりたいこと:OracleDBに接続可能な状態かを、バッチで自動調査したい。 今までlinux環境でやっていた処理を、上記環境でも行わなくてはいけなくなりました。 作業用クライアントでバッチを実行して、自動でチェックする想定です。 以下、今までlinux環境で使用していたソースです -------------------------------------------------- sqlplus -l -s USER/PASS@SID <<EOF | grep AAA select 'AAA' from dual; EOF if ($? == 0) then ~ -------------------------------------------------- 上記シェルを実行し、 ・DBに接続できる ・select文が正常に実行できる(問い合わせができる) ことを確認し、sqlplusを自動で抜けて、 戻り値が0ならOKとしていました。 これと全く同じことをwindows環境で行いたいのですが、 どのように記述すればいいのでしょうか? 詳しい方、ぜひ教えてください。

  • sqlplusの操作をシェル上で

    RedhatLinuxのシェルスクリプト上で Oracleのsqlplus操作を行うことは可能でしょうか? その場合、どのように記述すればよいでしょう? やりたい内容の例としては以下になります。 #!/bin/sh su -<oracleユーザー> sqlplus ※※※※ SQL> update ※※※ set ※※※ SQL> exit 上のような内容をcronに登録して自動処理をかけたいと考えています。

  • UNIX上のバッチで

    初歩的な質問ですみません。 SQLを実行して、結果の判定後エラーでなければ次の処理・・・、 というようなバッチを作りたいのですが、どのように記述すればよいでしょうか。 また実行の際、パラメータを別ファイルで(para1=xxx…)のように 外だしにしておきたいのですが、それを読みこんでから処理という ようなことを、バッチ(シェル?)のレベルでできますでしょうか?

  • バッチでのSQL実行結果の分岐処理について。

    バッチでのSQL実行結果の分岐処理について。 お世話になっております。 バッチからsqlを実行してその結果によってそれ以降のバッチ全体の処理を停止させる方法を考えています。 手がかりがつかめずまったく先に進めないためアドバイスをいただけますでしょうか。 バッチの内容(start_del.bat) -------------------------------------------------------- osql -i.\del.sql -o c:\wk\log.txt -S gold -E osql -i.\create.sql -o c:\wk\log.txt -S gold -E ------------------------------------------------------------ SQLの内容(del.sql) ------------------------------------------------------------ BEGIN TRANSACTION; DELETE FROM LDDB.dbo.test WHERE b='0'; IF @@ERROR = 0 <--エラー判定にこのコマンドを使おうと考えました BEGIN *********************** END ELSE BEGIN ********************** END COMMIT TRANSACTION; ------------------------------------------------------------ 処理の概要: 1.バッチで最初にdel.sqlを実行します。 2.del.sqlの実行が失敗すれば、2つ目のバッチであるcreate.sqlは実行ささずに、バッチを終了させます。 *ポイントはdel.sqlの結果というのは、バッチからdel.sqlを実行できたかではなく、del.sqlの実行結果を判断するという点です。 教えていただきたいこと ・del.sqlの実行後、制御がバッチに戻ったときに、結果を確認してバッチを継続させるか終了させるかを判断させる方法はどのような仕組みを作ればいいのでしょうか。 Windows2003サーバーで、SQLServerは2005です。 初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。 よろしくお願いいたします。