[pgsql-jp: 28717] Re: トリガの作成時のエラーについて。【解決】
みのむし
minoran @ lily.freemail.ne.jp
2003年 1月 20日 (月) 23:53:26 JST
みのむしです。
きしだ様ご返答ありがとうございます。
まず最初にpostさせて頂いた内容に誤りがありました。
CREATE TRIGGER ol_update
AFTER INSERT ON oya
FOR EACH ROW
EXECUTE PROCEDURE last_update();
と書きましたがAFTERのあとの動作対象テーブルは
kodomoテーブルにINSERTされたときですので
AFTER INSERT ON kodomo
でした。申し訳ありません。
On Mon, 20 Jan 2003 01:54:07 +0900
naoki kishida <kishida @ fk.urban.ne.jp> wrote:
> UPDATE oya SET l_update=utc WHERE oya_cd=new.kodomo_cd;
>
> ですね。
> そしたらファンクションに引数を渡す必要がなくなります。
教えて頂いた通りにしてみたのですが上手くはいきませんでした。
自分なりに教えて頂いた内容を元にしてみた所、上手く
いってしまいました(^^;
CREATE OR REPLACE FUNCTION last_update() RETURNS OPAQUE AS '
DECLARE
utc INTEGER;
BEGIN
SELECT reg_date INTO utc FROM kodomo WHERE kodomo_cd= new.kodomo_cd;
UPDATE oya SET l_update=utc WHERE oya_cd=new.oya_cd;
RETURN new;
END;
'language 'plpgsql';
CREATE TRIGGER ol_update
AFTER INSERT ON kodomo
FOR EACH ROW
EXECUTE PROCEDURE last_update();
自分がやりたかった事はこういう事だったのですがこの
CREATE FUNCTIONの内容の中身はまだ理解出来ていません。
かなり納得はいきませんがとりあえずは使う事にはします。
#う〜ん、上手くいってしまったら勉強にならない・・・(笑
> > #phpで作っているアプリケーションなのですが
> > #php側でSQLを動的に作って実行させたほうがこの場合は楽なのでしょうか・・
>
> ですけど、データベース側でやったほうが楽です。
<<中略>>
> でも、本質的な利点はそこではなく。
> ファンクションなどを使わずにデータベースを使ったアプリケーションを作る場
> 合、とくにWebの場合
> データベース設計 -> 画面遷移実装 -> データ処理
> の順に作業を進めることが多いと思います。
> ここで問題になるのは、データベース設計のときにデータ処理のことまで考えて
> いるのに、実装するのにタイムラグがあって忘れてるということです。
おっしゃる通りです。
過去にこの過ちを犯した為に今度の開発はDB設計で出来る処理は
DB側でさせてしまおうと思い立ったわけです。
前回の開発ではDBはただのデータ格納庫という認識しかありませんでした。
しかしPostgreSQLを知る度にアプリケーション側で処理していた事の
ほとんどはDBで出来るという事を学び、PostgreSQLの楽しさにハマって
しまいました(^^;
結局、悩んでいた事は解決したのですがこれでは意味がない・・・。
PL/pgSQLをもうちょっとお勉強してみる事にします。
それとトリガ自体、今まで難しそうで使った事がなかったのですが
いざ使ってみるとトリガ自体は簡単でその先にあるFUNCTIONが
難しいという事を学びました(^^;
きしだ様ありがとうございました。
###########################
みのむし
minoran @ lily.freemail.ne.jp
###########################
pgsql-jp メーリングリストの案内