Ram Mandavkar wrote:
> CREATE TABLE "READMODE" ("EPC" VARCHAR(50) COLLATE NOCASE ,"COUNT"
> INTEGER,"STATUS" VARCHAR)
> With 2 records
> 'e006',0,'0'
> 'e2003412DC03011808176518',0,'0'
> 
> //
> --------------------------------------------------------------------------------------
> Trigger on ReadMode Table
>   // --------------- //
> CREATE TRIGGER "main"."TR_MULTIREAD_AFTER" AFTER INSERT ON READMODE
>       WHEN( SELECT EPC AS a FROM READMODE where EPC=NEW.EPC AND COUNT=0
> collate nocase )
> 
>   BEGIN
> UPDATE READMODE SET STATUS='1';
>   END
> //
> --------------------------------------------------------------------------------------
> If i execute this query it works fine
> INSERT INTO READMODE ( EPC,COUNT,STATUS ) VALUES
> ('e2003412DC03011808176518',0,'0')
> 
> If i execute this query it does not work ( UPDATE statement does not get
> execute )
> INSERT INTO READMODE ( EPC,COUNT,STATUS ) VALUES ('e006',0,'0')

For me, your trigger doesn't run regardless of which values are inserted. 
Change it to

CREATE TRIGGER "main"."TR_MULTIREAD_AFTER" AFTER INSERT ON READMODE
       WHEN exists (SELECT EPC AS a FROM READMODE where EPC=NEW.EPC AND COUNT=0)
BEGIN
    UPDATE READMODE SET STATUS='1';
END

For some reason, WHEN clause doesn't like a string value as a condition.


Taking a step back - what exactly is your trigger supposed to achieve? It 
doesn't make any sense to me. For one thing, you are updating all rows in 
READMODE, not just the one that was inserted. If the goal is to make sure that, 
whenever a new record is inserted with count=0, its status is set to '1', then 
you want something like this:

CREATE TRIGGER TR_MULTIREAD_AFTER AFTER INSERT ON READMODE
       WHEN new.COUNT = 0
BEGIN
    UPDATE READMODE SET STATUS='1' where rowid=new.rowid;
END

Igor Tandetnik

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to