Quick and dirty reference of DB2 for Windows


1. 对象默认所在的SCHEMA不一定是你想要的,最好是在对象名前加上你想要的SCHEMA名。例如要在我的表名和触发器名字前加上SCHEMA名。

2.触发器对应的执行逻辑中IF语句的条件要用()引起来。触发器后的执行逻辑其实就是存储过程的语法。

3. 注意ELSEIF的拼写,不是两个分开的单词:ELSE IF。

4.过程体中的语句要以分号结尾。但是最后一个END之后不可以有分号。而且在GUI的命令中心里执行创建过程或触发器的语句时,要注意设置SQLTERM并在END后加一个SQLTERM(例如设置成!)。

5. DELETE操作上不可以创建BEFORE类型的触发器。

示例:

DROP TABLE PUBLIC.TEST

CREATE TABLE PUBLIC.TEST (
  ID INT NOT NULL PRIMARY KEY,
  DATA VARCHAR(100), 
  SIGN INT
)

DROP TABLE PUBLIC.TEST_TEMP

CREATE TABLE PUBLIC.TEST_TEMP (
  ID INTEGER GENERATED BY DEFAULT AS IDENTITY,
  OTYPE INTEGER NOT NULL,
  OSTATUS INTEGER NOT NULL,
  OTIME TIMESTAMP,
  OTIMES INTEGER NOT NULL,
  OCHANGED INTEGER NOT NULL,
  OENTERTIME TIMESTAMP NOT NULL,
  ID_OLD INTEGER NOT NULL,
  ID_NEW INTEGER,
  PRIMARY KEY (ID)
)

DROP TRIGGER PUBLIC.TR_TEST_DELETE

CREATE TRIGGER PUBLIC.TR_TEST_DELETE
   AFTER DELETE ON PUBLIC.TEST
   REFERENCING OLD AS O
   FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
   IF (O.SIGN IS NULL) THEN
      INSERT INTO PUBLIC.TEST_TEMP(OTYPE, OSTATUS, OTIME, OTIMES, OCHANGED, ID_OLD, ID_NEW)
      VALUES(0, 0, CURRENT_TIMESTAMP, 0, 0, O.ID, NULL);
   ELSEIF (O.SIGN = 1) THEN
      UPDATE PUBLIC.TEST SET SIGN = 2 WHERE ID = O.ID;
   END IF;
END
!

DB2 V8、V9的GUI工具在易用性方面还是比较差,怎么看也不像是一个专业的产品。


Copyright 2009-2010, zedware_at_gmail.com
Last modified on Friday, 2009-10-02