【发布时间】:2011-12-07 08:20:01
【问题描述】:
在 DB2 for IBM System i 中,我创建了这个触发器,用于在 MYLOGTABLE 上记录在 MYCHECKEDTABLE 上进行的每个插入操作:
SET SCHEMA MYSCHEMA;
CREATE TRIGGER MYTRIGGER AFTER INSERT ON MYCHECKEDTABLE
REFERENCING NEW AS ROWREF
FOR EACH ROW BEGIN ATOMIC
INSERT INTO MYLOGTABLE -- after creation becomes MYSCHEMA.MYLOGTABLE
(MMACOD, OPTYPE, OPDATE)
VALUES (ROWREF.ID, 'I', CURRENT TIMESTAMP);
END;
DBMS 使用硬编码的MYSCHEMA.MYLOGTABLE 存储触发器主体。
现在假设我们将整个架构复制为一个新架构NEWSCHEMA。当我在NEWSCHEMA.MYCHECKEDTABLE 中插入一条记录时,一条日志记录将被添加到MYSCHEMA.MYLOGTABLE 而不是NEWSCHEMA.MYLOGTABLE,即在触发器及其表所在的架构中。这是大问题的根源!!也因为许多用户可以在不受我控制的情况下复制架构...
那么,有没有办法在触发器主体中指定触发器所在的架构?这样我们就可以将日志记录写入正确的MYLOGTABLE。 PARENT SCHEMA... 之类的东西还是有解决方法?
非常感谢!
【问题讨论】:
标签: database triggers database-schema ibm-midrange db2-400