2017-09-25 10 views
0

私はRailsプロジェクトでsqlite3を使用しています。別の参照テーブルが更新されると自動的にテーブルに挿入されるトリガーを作成する必要があります。 たとえば、2つのテーブルがあります内訳合計の各表のスキーマは次のとおりです。その後UPSERT付きSqlite3トリガー

Date TEXT NOT NULL, 
Daily_Total DECIMAL NOT NULL, 
FOREIGN KEY (Date) REFERENCES Breakdown(Date) 

Date TEXT NOT NULL, 
Amount DECIMAL NOT NULL 

合計 内訳は、以下の私のトリガーの作成です。

 CREATE TRIGGER update_sum AFTER INSERT ON Breakdown 
    ...> BEGIN 
    ...> INSERT OR REPLACE INTO Total (Date, Daily_Total) 
    ...> VALUES (Breakdown.Date, 
    ...> (SELECT SUM(Amount) FROM Breakdown WHERE Date = Total.Date)); 
    ...> END; 

だから、私の考えは、私が**INSERT INTO Breakdown VALUES (Date('now'),19.99);**として内訳テーブルに挿入すると、その後合計テーブルが挿入または更新のいずれかによって更新されますです。いいえ、そのようなコラム:私は内訳表に挿入するとき

はしかし、私はエラーというエラーを取得しBreakdown.Date

は誰もが、私が間違ってやっているポイントを私にしてください直接することはできますか?

ありがとうございました!

答えて

0

あなたはトリガーがトリガーする原因となった行の値が、その「テーブル」is called NEWアクセスすることができます。

INSERT ... VALUES(NEW.Date, (SELECT SUM... WHERE Date = NEW.Date)); 
+0

はありがとうございました!それはまさに私が望んでいたものでした!しかし、実際のテーブル名ではなく、なぜNEWを使用しているのか、少し詳しく説明したり、ドキュメントを入手したりすることはできますか? – Terrence