2017-09-25 4 views
0

J'utilise sqlite3 sur mon projet Rails et je dois créer un déclencheur qui insère automatiquement dans la table quand une autre table de référencement est mis à jour. Par exemple, j'ai 2 tables Répartition et Total des, des schémas pour chaque table sont comme ci-dessous. Répartitiondéclencheur Sqlite3 avec UPSERT

Date TEXT NOT NULL, 
Amount DECIMAL NOT NULL 

total

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

Alors, voici ma création de déclenchement.

 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; 

Donc, mon idée est quand insérer dans Répartition table **INSERT INTO Breakdown VALUES (Date('now'),19.99);** puis Total Tableau est mis à jour par l'une ou l'insertion mise à jour.

Cependant, lors de l'insertion dans la table de répartition, je reçois une erreur disant Erreur: pas de colonne: Breakdown.Date

Quelqu'un peut-il me diriger vers le point où je fais mal, s'il vous plaît?

Merci!

Répondre

0

Vous pouvez accéder aux valeurs de la ligne qui a provoqué le déclenchement de déclencher, mais que « table » is called NEW:

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

Merci beaucoup! C'était exactement ce que je voulais! Mais, puis-je obtenir un peu plus d'explications ou de documentation que je peux lire pourquoi utilisons-nous NEW plutôt que le nom de la table? – Terrence