• 締切済み

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

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

みんなの回答

  • Go_Ahead
  • ベストアンサー率67% (21/31)
回答No.3

こんにちは。 私ならこんな感じで。 (1) DBに格納されているファイル名を返すFunctionを作成&実行 (2) (1)の返値を引数にCSVを作成するProcedure(Function)を作成&実行 上記の実行は Shell上のSQLPLUS で行うように構成すれば CRON なり何なりでも動かせますし、Oracle のスケジューラーでも動かせるでしょう。 ヒントとしては utilfile.xxx 辺りを旨く使うと幸せかも知れません。 蛇足ですが、技術系の質問をする時は、せめて開発環境を…。 DBMS使うなら、製品名とそのバージョン位を書いて、何をどうしたが、結果、これが分からないと質問された方が沢山回答を頂けますよ。 参考まで♪

_ebi_
質問者

お礼

回答ありがとうございます。 結局ファンクション、プロシージャを作成せずSQLを作成し、取得したデータを使って動きました。

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

echo "SELECT * FROM `・・・`;" | mysql -uユーザー -pパスワード >test.csv のようなスクリプトをcronで実行してみて下さい

_ebi_
質問者

お礼

回答ありがとうございます! 追記で申し訳ないのですが、ファイル名はSQLが格納されているテーブルのカラムを使おうと考えているのですが、これはどのようにすればよろしいのでしょうか。 一度「select ファイル名、SQL名 * from テーブル名 where ステータス='AAA'」のようなselect文を記入し、情報を取得したほうがいいのでしょうか。

回答No.1

RDBMS名とバージョンは何ですか? >画面上でテーブルのカラムに対象のSQLをインサート、夜中にSQLが入っているカラムを取得 SQL(SELECT文だけ?)を、DB上に一旦格納しておくのですか? その目的は何でしょうか?

_ebi_
質問者

お礼

回答ありがとうございます! RDBMSはoracle10gです。 夜間バッチで動かすことになったのは、画面上で動かしてみたら、データが多すぎたのか、タイムアウトしてしまったのが原因です。 DBに格納するのは、SQL文(insert文)だけではなく、誰が落としたのか、どの時間に作成されたかなど、の情報も格納されております。

関連するQ&A