2017-11-24 5 views
1

を挿入したとき、私は自分のユーザー行の予め計算値とともに、バランスの変化のテーブルとしてIがユーザ残高を格納市場プラットフォーム、に取り組んでいます。これにより、私はバランスを簡単に確認できますが、特定の間隔で再計算して、同期がとれるようにします。ここで更新別のテーブルの行が

がバランス変更テーブルがどのように見えるかの例です:新しい行を挿入すると

| id | opening_balance | closing_balance | user_id | 
|----|-----------------|-----------------|---------| 
| 1 | 23.40   | 28.20   | 6  | 
| 2 | 14.70   | 11.10   | 79  | 
| 3 | 117.12   | 107.12   | 20  | 

、私は新たに挿入されたclosing_balanceからuser_id関係上balance列を更新します。私は、オンラインで見つけたものを、私は次のことを持っているから

は、しかし、それはMySQLのではなく、PostgreSQLのです。

CREATE TRIGGER balance_update 
AFTER INSERT ON balance_history 
FOR EACH ROW 
BEGIN 
    UPDATE users 
    SET balance = NEW.closing_balance 
    WHERE id = NEW.user_id; 
END; 

トリガを作成する前にPostgresqlで名前付きプロシージャを作成する必要がありますか?これを変換する最善の方法は不明です。彼らは、アクションなどの手順を実行するためのPostgresで

+0

私が '構文エラーを取得またはそれに近いんだ –

答えて

1

トリガーは、MySQLのよりも少し複雑な構文を持っています。この場合、最初のテーブルに挿入した結果として必要な更新を実行する関数を定義することができます。

CREATE OR REPLACE FUNCTION your_proc() 
RETURNS trigger AS 
$$ 
BEGIN 
    UPDATE users 
    SET balance = NEW.closing_balance 
    WHERE id = NEW.user_id; 
RETURN NEW; 
END; 
$$ 
LANGUAGE 'plpgsql'; 

CREATE TRIGGER balance_update 
AFTER INSERT ON balance_history 
FOR EACH ROW 
EXECUTE PROCEDURE your_proc(); 
+0

https://www.postgresql.org/docs/current/static/plpgsql-trigger.html#PLPGSQL-TRIGGER-EXAMPLEマニュアルの例を参照してください。 "END" ' –

+0

@BenedictLewis Typo、私は最後にセミコロンで' RETURN NEW;ではなく 'RETURN NEW'を持っていました。 –

+0

ああ、文法エラーが発生しました。戻り値 " –

関連する問題