Aというテーブルのaカラムが更新されれば、Bテーブルの列の中でAテーブルの列id含む列(複数)のbカラムをFalseからTrueに変更されるような、トリガー と プロシージャを作りたいのです。
考えていたのは、プロシージャは、
CREATE FUNCTION update_edit_b() RETURNS OPAQUE AS '
BEGIN
(複数列指定?)
NEW.b := 't';
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
プロシージャで、Bテーブルの複数列を指定するにはどうしたら良いでしょうか?
トリガーは
CREATE TRIGGER trgger_a
AFTER UPDATE OF a
ON Table_a
FOR EACH STATEMENT
EXECUTE PROCEDURE update_edit_b ;
こんな感じでしょうか?
No.1ベストアンサー
- 回答日時:
・NEW の値を使う場合には、FOR EACH ROW トリガを使う必要がある。
・テーブルAに仕掛けたトリガの NEW は、テーブルAの行を表している。
といったあたりがポイントと思われます。
↓こんな感じでどうでしょうか?
CREATE FUNCTION update_edit_b()
RETURNS TRIGGER AS $$ -- (OPAQUE はかなり古い書き方?)
BEGIN
UPDATE Table_b SET Column_b = true WHERE Table_b.A_id = NEW.id
AND NOT Column_b; -- (複数回更新する際に、無駄なUPDATEを避ける)
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trgger_a
AFTER -- (BEFOREのほうが若干効率が良いので、置き換えも検討すべし)
UPDATE OF a ON Table_a
FOR EACH ROW -- (STATEMENTではなくROWを指定)
EXECUTE PROCEDURE update_edit_b;
参考URL:http://www.postgresql.jp/document/current/html/s …
ありがとうございます。大変参考になりました。
複数行はやめて1行としましたので、プロシージャは、こうしました。
CREATE FUNCTION update_edit() RETURNS OPAQUE AS '
BEGIN
UPDATE Table_a SET a = true WHERE Teble_a.b_id= Table_b.id;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
トリガーについては、使っているPostgresQL のバージョン(8.4.9)ではカラムの変更は
サポートされず、バージョン9からなそうで、とりあえず、バージョンアップしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
SQLにて指定日付より前、かつ最...
-
SQLでUPSERTを一度に複数行やる...
-
テーブルに存在しない列をselec...
-
Postgresqlのレポート機能について
-
2つのテーブルで引き算 postgres
-
VIEWのCOPYってできないんですか?
-
javaでデータベース上のテーブ...
-
単純なselectが遅くなるのです...
-
PostgreSQLの断片化の状況を確...
-
Postgresのデータ領域の拡張に...
-
Pythonで2つのデータ(キー無し...
-
MS Access から PostgreSQL へ...
-
VARCHAR型の数値比較
-
PostgreSQL レコードからアイテ...
-
【PostgreからSQL-Serverのテー...
-
L2SWはARPテーブルを持っている?
-
sqlplusで表示が変なので、出力...
-
一つ前に戻るには…
-
Accessでデータシートに同じデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
SQLにて指定日付より前、かつ最...
-
PostgreSQLの断片化の状況を確...
-
Postgresqlのレポート機能について
-
2つのテーブルで引き算 postgres
-
テーブルを作ろうとしたら。
-
Postgresのデータ領域の拡張に...
-
javaでデータベース上のテーブ...
-
postgres FILLFACTOR 確認方法
-
テーブルにcsvファイルをインポ...
-
VIEWのCOPYってできないんですか?
-
トリガープロシージャのNEW変数...
-
同一カラムに複数条件指定
-
MS Access から PostgreSQL へ...
-
レコードを1件のみ取得した後...
-
難しいSQL
-
COPYコマンドによるTEXT取り込...
おすすめ情報