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で質問しましょう!
似たような質問が見つかりました
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- Oracle SQL update方法 2 2022/06/22 14:07
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
PostgreSQLの断片化の状況を確...
-
SQLにて指定日付より前、かつ最...
-
単純なselectが遅くなるのです...
-
SQLでUPSERTを一度に複数行やる...
-
postgreSQL カラムの全ての値を...
-
reindex と update のデッドロック
-
2つのテーブルで引き算 postgres
-
UPDATE文の更新順序について
-
PostgreSQL 8.0.2 の ERROR: r...
-
データベースで表示算のような...
-
テーブルを作ろうとしたら。
-
投稿記事と関連付けているテー...
-
PostgresSQLでテーブル定義の抽...
-
Postgresqlのレポート機能について
-
テーブルに存在しない列をselec...
-
Accessでデータシートに同じデ...
-
ROWNUMでUPDATEをしたいのです...
-
テーブル名をカラムとして取得...
-
Accessのテーブルデータを一気...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
単純なselectが遅くなるのです...
-
SQLにて指定日付より前、かつ最...
-
SQLでUPSERTを一度に複数行やる...
-
PostgreSQLの断片化の状況を確...
-
テーブルに存在しない列をselec...
-
2つのテーブルで引き算 postgres
-
Postgresのデータ領域の拡張に...
-
reindex と update のデッドロック
-
javaでデータベース上のテーブ...
-
最新レコードを抽出し外部結合...
-
テーブルを作ろうとしたら。
-
PostgresSQLでテーブル定義の抽...
-
フィールドの入れ替えはできま...
-
VIEWのCOPYってできないんですか?
-
MS Access から PostgreSQL へ...
-
Postgresqlのレポート機能について
-
バキューム処理の実行時間の目安
-
UPDATE文の更新順序について
-
同一カラムに複数条件指定
おすすめ情報