On Saturday 27 March 2004 11:14 pm, Avner Levy wrote:
> I have a program (which I can't change) that every time a student fails
> in a course inserts a record like (34333, "math", 1).
...

B"H, I have a solution for you.  Unfortunately, SQLite doesn't let you modify
the new.* or old.* inside a trigger, but you can accomplish what you want like
this:

-- File:                test.sql
-- Description:         Test file for Avner Levy 
-- Author:              Ron Aaron
-- Created:             Sun 28 Mar 2004 11:21:21
-- Last updated:        Mon 29 Mar 2004 08:46:02

BEGIN TRANSACTION;
CREATE TABLE grades ( id, course, failures );
CREATE TABLE helper (id, course, failures);

CREATE UNIQUE INDEX g_0 ON grades (id,course) ON CONFLICT REPLACE;
CREATE UNIQUE INDEX h_0 ON helper (id,course) ON CONFLICT REPLACE;

CREATE TRIGGER g_i BEFORE INSERT on grades
BEGIN
        INSERT INTO helper
        SELECT * from grades
        WHERE id=new.id and course=new.course;
END;

CREATE TRIGGER g_i2 AFTER INSERT on grades
BEGIN
        INSERT INTO grades 
        SELECT id,course,failures+1 from helper
        WHERE id=new.id and course=new.course;
END;

COMMIT;

BEGIN TRANSACTION;
        INSERT INTO grades VALUES (34333, "math", 1);
        INSERT INTO grades VALUES (34333, "history", 1);
        INSERT INTO grades VALUES (34333, "math", 1);
        INSERT INTO grades VALUES (34333, "math", 1);
        INSERT INTO grades VALUES (34333, "history", 1);
        INSERT INTO grades VALUES (34333, "math", 1);
COMMIT;

SELECT "grades:", * FROM grades;
SELECT "helper:", * FROM helper;


Hope this helps,
Ron
-- 
My GPG public key is at http://ronware.org/
fingerprint:  4E91 06E9 2020 114C 8BCD  55B2 0816 60AF 2B3D 4C51




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to