2013-03-26 3 views
1

Ceci est une question assez spécifique. J'ai essayé de comprendre exactement les étapes nécessaires, mais je ne peux pas trouver quelque chose qui fonctionne.Android SQlite Trigger

J'ai besoin d'un déclencheur qui insère de nouveaux enregistrements dans une table appelée Enregistrements, chaque fois qu'une nouvelle tâche dans la table 'Tâche' est insérée dans la base de données. J'ai besoin d'insérer un enregistrement pour chaque élément ouvert dans le tableau 'Items' qui correspond aux critères de la tâche. Mon pseudo code/tentative à la déclaration suit.

CREATE TRIGGER update_item_records ON INSERT INTO tasks 
BEGIN 
    SELECT item in ITEMS WHERE item.type=new.type AND item.program=new.program 
    ....now insert into records - this is where I'm confused 
    INSERT INTO records record.item = item.id, record.program = new.program, 
    record.task=new.id 
END 

Répondre

2

Le résultat d'une instruction SELECT à l'intérieur d'un déclencheur est ignoré. Cependant, la commande INSERTaccepts a SELECT query as source:

INSERT INTO records(item, program, task) 
SELECT id, new.program, new.id 
FROM items 
WHERE type = new.type 
    AND program = new.program; 
+0

Merci. C'est génial. C'est cool comment vous pouvez mélanger les références à la nouvelle ligne avec la référence de la colonne. J'avais écrit du code pour le faire sans utiliser sqlite, mais c'est environ. 50 lignes plus courtes! – ndw

0

CODE and CONCEPT HERE

Triggers sont quelques-uns procedural code exécuté lorsque certains événements se produisent dans notre database.

Tenir compte de cette démonstration simple pour trigger qui ajoute le champ dans la cantine et la bibliothèque automatiquement après l'insertion de nouveaux étudiants dans le collège .

CREATE TRIGGER if not exists add_student 
    AFTER INSERT 
ON[student] 
    for each row 
    BEGIN 
     insert into library values (2 , new.sid); 
     insert into canteen values (3 , new.sid); 
    END;