• ベストアンサー

DBの自動更新の方法

すみません、データーベース初心者なので教えてください。 sybaseで毎週、週1回決まったDBのある項目を更新しなくてはいけません。 項目はきまってるのですが、更新する値が毎回違います。 普段は毎回sqlのスクリプトの内容を書き換えてコマンドラインから実行しています。 sqlのスクリプトの内容は以下のような感じです。 update A_DATA set bbb = 'あいうえお' where ccc=1 みたいな単純な更新です。 ただ毎回 bbbの項目にセットする内容が変わります。 何かいい方法、そのような事がのっているサイトがありましたら 教えてください。 よろしくお願いします。

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

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

自動更新というのはいちいちスクリプトを編集せずにということかな。 次のようなスクリプトを作ればいちいち編集する必要はないですよね。 unix 環境と仮定してですが、 #!/usr/bin/sh isql -Uusername -Ppassword -Jeucjis << EOF use dbname go update A_DATA set bbb="$1" where ccc=1 go EOF というシェルスクリプトを作成して(そのファイル名を A_DATA_UPD としましょう) % A_DATA_UPD あいうえお のようにすればいちいち編集する必要はなくなります。 ヒアドキュメントとシェル変数の展開を応用すれば結構いろいろ なことができますよ。 シェルスクリプトの一般的な話なので、市販本を読んでみてみると いいかもしれませんね。 前もって変更する値がわかっていれば VDSLさんのようにテーブルを用意する という方法もありますね。 SYBASE はサブクエリを使わなくても update A_DATA set bbb = TempTable.bbb from TempTable where ccc = 1 and TempTable.bbb = getdate() でOKです。

その他の回答 (1)

回答No.1

私はOracle使いなので一般論になってしまいますが.... bbbの将来の値があらかじめわかっているのであれば、年月日をキーとし、bbbが1:1で対応するようなテーブルをDB上に用意しておいて、 update A_DATE set bbb = (select bbb from TempTable where 年月日 = sysdate) where ccc=1 みたいな感じのSQLを用意し、それをcronで週一回実行されるように設定すればいいと思います。 #sybaseでupdate文の中にサブクエリが書けるかどうかは調べてみてください。 当然ですが、あらかじめbbbの値がわからなければ、どうやっても自動化は不可能です。

関連するQ&A