• 締切済み
  • すぐに回答を!

UNIX上のバッチで

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数264
  • ありがとう数2

みんなの回答

  • 回答No.2
  • yambejp
  • ベストアンサー率51% (3827/7415)

SQLと親和性の高いPHPのコマンドラインモードでやってみては?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

PHPはやったことがありませんでした。SQL処理に適しているのですね。機会があれば挑戦したいと思います。ありがとうございました。

関連するQ&A

  • SQLをバッチで実行

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

  • Bシェルで文字列が日付として正しいかの判定方法

    パラメータでYYYYMMDDをもらうようなシェルを作成します。 ./XXX.sh 20031112 みたいな感じです。 で、このパラメータが日付として問題ないかの判定をしたいのですが 方法がいまいちわかりません。 例) ./XXX.sh 20031131 ⇒ エラー なにか良い方法は無いでしょうか。 よろしくお願いいたします。

  • バッチでの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です。 初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。 よろしくお願いいたします。

  • 回答No.1

データベースは何を使われてますか? 私は普段Oracleなのですが、SQLの実行結果をspoolファイルに出力し、 その中にORA-やSP2-がなければ正常終了としています。 パラメータを別ファイルにする方法もよくやってます。 ----こんなファイル(test.txt)なら---- AAA=hogehoge BBB=example CCC=hello ------------------------------------ PARAM1=`grep "AAA" test.txt | awk -F= '{print $2}'` でしょうか。 sedでやる方法もあると思いますので1つの例として。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。おかげさまでイメージ通りのことができそうです。助かりました!

関連するQ&A

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

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

  • ASPをバッチ風に起動

    今ASPからバッチを起動しようとしています。 Shelコマンドでbatを起動しようと思ったのですが、セキュリティとの問題があり、その処理のみを行うASP(画面表示無し)を作成しバッチASPとして処理を実行させていたます。 その際、メインの画面はバッチASPを呼び出すだけなのですが(window.openでバッチASPを呼び出す)、バッチASPが重い処理を行っているとメインのASPも実行がされなくなってしまいます。(待ち状態) バッチASPではADOでトランザクションを行いSQLを発効しています。 またメインASPではDBから時間を取得するだけのSQLを発効しています。 本来メインASPはバッチASPを呼び出すのみでバッチASPが重い処理を行っても依存しないと思っていますがどのようにすれば、依存しないようになるのでしょうか? 説明が難しいのですが、よろしくお願いします。

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

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

  • バッチからの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キーを押下せずに、処理を実行させるためにはどうすればよろしいでしょうか。  初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • rshを使用したバッチファイル

    今、あるサーバにPCからシェルをFTPして、RSHでFTPしたシェルを実行するバッチファイルを作成していますが、 コマンド1行づつをカット&ペーストで実行すると正常に動作するのですが、バッチファイルをWクリックすると、FTP は正常に動作するのですが、RSHの処理がされず、ループ? (ループの記述はなし)してしまいます。 *ECHO ONでじっこうすると、RSHの行は呼ばれているみたいですが、処理が失敗しているようです。 バッチファイルでの設定に問題があるのでしょうか? <バッチの内容 start> *IP、パス、ユーザ名は伏せさせていただきます。 ftp -s:d:\PATH\send.txt XXX.XXX.XXX.XXX rsh XXX.XXX.XXX.XXX -l USRNAM -n "chmod +x /PATH2/rsh.sh;source /PATH3/envsetUSRNAM;PATH4/rsh.sh" <バッチの内容 end>

  • バッチでSQLを実行するにはどうすれば?

    いつもお世話になっております。 質問なのですが、あるSQLを夜間にバッチで処理し、その結果をCSV形式で保存したいのですが、どのようにすればよろしいでしょうか。 画面上でテーブルのカラムに対象のSQLをインサート、夜中にSQLが入っているカラムを取得し、更にそのSQLを実行してCSV形式でデータを保管したいのです。 シェルスクリプト(kshかbash?)で実行したいと考えております。よろしくお願いします。

  • シェルの引数を、実行するパラメータに指定するには?

    シェル初心者です。 シェルの実行パラメータを、その中で実行する処理のパラメータに再び指定したいのですが可能でしょうか。 ただし、パラメータの数は可変です。 環境はSolarisです。 aaa.sh aaa bbb ccc aaa.shの中 bbbコマンド aaa bbb ccc ということを行いたいです。 パラメータ数が固定であれば問題なさそうですが 可変の場合、どのような記述をすればよいでしょうか?

  • バッチのFOR及びIF文

    バッチであるTEXTファイルから一部を置換して別のファイルを作成する処理を考えてます。 「あるTEXTファイル」にはSQL文があります。 SELECT CODE ||'","'|| NAME FROM TEST01 WHERE (UPDATEDATE || UPDATETIME) > TO_CHAR(_HENKAN_) の内容が入ってます。 このファイルから「_HENKAN_」をバッチファイル内で置換し、実行できるSQLファイルを作成する処理です。 しかし、FOR文の中のIF文で全然動かないです。 FOR /F "tokens=1 delims=" %%A IN (C:\sql.txt) DO ( if /i %%A=="TO_CHAR(_HENKAN_)" ( echo TO_CHAR(%HENKAN%) >> %出力ファイル% 2>&1←%HENKAN%は時間を設定済み*ここが問題 echo %%A ←テストのため ) else ( echo %%A >> %出力ファイル% 2>&1 ) ) 実行時はエラーはなく実行されますが、echo TO_CHAR(%HENKAN%)が全然効かないようです。 いや、そもそも if /i %%A=="TO_CHAR(_HENKAN_)"が効かないですね。echo %%Aで全SQL文が表示されます。 いろいろ調べたのですが、理由がわかりませんでした。 バッチに詳しい方は教えてください。 よろしくお願いします。

  • suと一般ユーザの判別

    こんにちは、よろしくお願いします! 一連の処理をシェルで記述しているのですが、 本シェルを"su"の権限である場合のみ実行させたいと考えています。 (つまり一般ユーザ権限では実行できないようにしたいのです) シェル内で、なにかしらの判定を行い、 suなら処理続行、一般ユーザなら処理中断・・・ のようにしていきたいのですが、 何か良い方法はありませんでしょうか? なお、シェル内で"su"を実行し、 強制的にsuにする方法も検討しましたが、 su状態においても、さらにsuがきいてしまうようで、 失敗しました。 よろしくお願いします。

  • Cシェルについて

    Cシェルについて素人な為、 初歩的な質問となりますが、ご教授お願い致します。 Cシェルのif文についてですが、 IF XXX = 1 --処理-- endif と記述したのですが、 「IF:コマンドがみつかりません。」というメッセージが 表示されました。 Cシェルでは、if文は大文字ではいけないのでしょうか? また、その時の"="は2つ続けないと駄目なのでしょうか? 初歩的ですいませんが、宜しくお願い致します。 合わせて、何か役に立つホームページなども教えていただければ幸いです。