A.J.Millan <[EMAIL PROTECTED]> wrote:
I want know if is possible to do a DELETE, INSERT or UPDATE statement
from
inside a TRIGGER.

Yes. Otherwise a trigger would be rather pointless.

Let's say:

CREATE TABLE  tableA (
Id  INTEGER,
... );

CREATE TABLE  tableB (
Ref  INTEGER,
... );

CREATE  TRIGGER DeleteReferences BEFORE DELETE ON tableA
BEGIN
  SELECT CASE
  WHEN (SELECT count(*) FROM  tableB  WHERE  Ref  =  OLD.Id) != 0 THEN
            RAISE(ABORT, 'Id field referenced in Table-B')
            // These one Work!!
  WHEN (SELECT count(*)  FROM tableB  WHERE  Ref  =  OLD.Id) != 0 THEN
            DELETE FROM  tableB  WHERE  Ref = OLD.Id
             // I get an error here
 END;
END;

You cannot put a DELETE statement inside a SELECT statement. Note that RAISE() is a function and may appear where an expression can appear. DELETE is a statement.

Make it

CREATE  TRIGGER DeleteReferences BEFORE DELETE ON tableA
BEGIN
  SELECT RAISE(ABORT, 'Id field referenced in Table-B')
  where exists (SELECT * FROM  tableB  WHERE  Ref  =  OLD.Id);

   DELETE FROM  tableB  WHERE  Ref = OLD.Id;
END;

If there are in fact no records in tableB that match the condition, DELETE will safely do nothing. You don't need an explicit check first.

Igor Tandetnik

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to