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工具在易用性方面还是比较差,怎么看也不像是一个专业的产品。