Hello,
 
i noticed that Instead of Update Triggers on Views do not fire as soon as the 
Views get a bit more involved.

The Following View and Trigger Code compiles w/o Errors.
 
But when changing the SYNC column nothing happens to REF_TAB, that means the 
trigger does not fire.
A drastically simpler View Definition in contrast does what i expect in a 
similar context.
 
Does anybody have an idea what might be the issue?
 
Regards,
Engin

---------------------------------------------------------------------

CREATE VIEW X_DEV2REF
AS
SELECT 'x' SYNC,C.ENV ENV,'' TV,C.SCHEMA SCHEMA,C.TAB TAB,'' COL,'' PF,'' U,'' 
NN,'' INC,'' CACHE,'' TYPE,'' LENGTH,'' SCALE,IFNULL(S.ALTERED,R.CREATED) 
ALTERED
FROM
(
   SELECT ENV,SCHEMA,TAB
   FROM
   (
      SELECT 'DEV' ENV,SCHEMA,TAB
      FROM ENV_TAB
      WHERE ENV = 'DEV'
      EXCEPT
      SELECT 'DEV' ENV,SCHEMA,TAB
      FROM   REF_TAB
   )
   UNION ALL
   SELECT ENV,SCHEMA,TAB
   FROM
   (
      SELECT 'REF' ENV,SCHEMA,TAB
      FROM   REF_TAB
      EXCEPT
      SELECT 'REF' ENV,SCHEMA,TAB
      FROM ENV_TAB
      WHERE ENV = 'DEV'
   )
) C
LEFT JOIN ENV_TAB S ON (S.ENV=C.ENV AND S.TAB=C.TAB)
LEFT JOIN REF_TAB R ON (C.ENV='REF' AND R.TAB=C.TAB)
union
SELECT 'x' 
SYNC,C.ENV,C.TV,C.SCHEMA,C.TAB,C.COL,C.PF,C.U,C.NN,C.INC,C.CACHE,C.TYPE,C.LENGTH,C.SCALE,T.ALTERED
FROM
(
   SELECT ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
   FROM
   (
      SELECT 'DEV' ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
      FROM ENV_COL
      WHERE ENV = 'DEV'
      EXCEPT
      SELECT 'SIT' ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
      FROM REF_COL
   )
   WHERE TAB NOT IN (SELECT TAB FROM X_DEV2SIT_TAB)
   UNION ALL
   SELECT ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
   FROM
   (
      SELECT 'REF' ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
      FROM REF_COL
      EXCEPT
      SELECT 'DEV' ENV,TV,SCHEMA,TAB,PF,U,COL,NN,INC,CACHE,TYPE,LENGTH,SCALE
      FROM ENV_COL
      WHERE ENV = 'DEV'
   )
   WHERE SCHEMA||'.'||TAB NOT IN
   (  
      SELECT DISTINCT SCHEMA||'.'||TAB     
      FROM     
      (
         SELECT ENV,SCHEMA,TAB
         FROM
         (
           SELECT 'DEV' ENV,SCHEMA,TAB
           FROM ENV_TAB
           WHERE ENV = 'DEV'
           EXCEPT
           SELECT 'DEV' ENV,SCHEMA,TAB
           FROM   REF_TAB
         )
         UNION ALL
         SELECT ENV,SCHEMA,TAB
         FROM
         (
           SELECT 'REF' ENV,SCHEMA,TAB
           FROM   REF_TAB
           EXCEPT
           SELECT 'REF' ENV,SCHEMA,TAB
           FROM ENV_TAB
           WHERE ENV = 'DEV'
         )     
      )
   )
) C
JOIN ENV_TAB T ON (T.ENV=C.ENV AND C.TAB=T.TAB)
ORDER BY TV,TAB,COL,ENV;
 
CREATE TRIGGER TR_X_DEV2REF_01  INSTEAD OF UPDATE of SYNC ON X_DEV2REF
BEGIN
    delete from REF_TAB where 1=1;     -- Just to Check if the Trigger fired..
END;
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to