【发布时间】:2021-01-26 12:00:12
【问题描述】:
如果我尝试如下创建一个带有 After 的触发器,它工作正常。
CREATE TRIGGER UDO.TG_TEST AFTER UPDATE
OF LAST_BACKUP ON
UDO.BACKUP FOR EACH ROW
INSERT
INTO
UDO.BACKUP_HIST(BACKUP_ID,
INST_NAME,
INST_ID,
DB_NAME,
DB_ID,
SERVER,
RESTORE_TS,
LAST_BACKUP,
BACKUP_TYP,
BACKUP_DAUER,
BACKUP_ORT)
SELECT
BACKUP_ID,
INST_NAME,
INST_ID,
DB_NAME,
DB_ID,
SERVER,
RESTORE_TS,
LAST_BACKUP,
BACKUP_TYP,
BACKUP_DAUER,
BACKUP_ORT
FROM UDO.BACKUP
但如果我执行完全相同的创建但使用 BEFORE 或 NO CASCADE BEFORE:
CREATE TRIGGER UDO.TG_TEST NO CASCADE BEFORE UPDATE
OF LAST_BACKUP ON
UDO.BACKUP FOR EACH ROW
INSERT
INTO
UDO.BACKUP_HIST(BACKUP_ID,
INST_NAME,
INST_ID,
DB_NAME,
DB_ID,
SERVER,
RESTORE_TS,
LAST_BACKUP,
BACKUP_TYP,
BACKUP_DAUER,
BACKUP_ORT)
SELECT
BACKUP_ID,
INST_NAME,
INST_ID,
DB_NAME,
DB_ID,
SERVER,
RESTORE_TS,
LAST_BACKUP,
BACKUP_TYP,
BACKUP_DAUER,
BACKUP_ORT
FROM UDO.BACKUP
我收到以下错误:
SQL-Fehler [42987]:触发器“UDO.TG_TEST”是使用不受支持的触发 SQL 语句定义的。SQLCODE=-797, SQLSTATE=42987, DRIVER=3.72.44
我根据IBM DB2 documentation检查了语法,我认为是正确的。
我忽略了什么吗?
编辑:
平台:LUW, DB2 服务器版本:11.1.4.4
我的实际目标是在更新 UDO.BACKUP 之前将 UDO.BACKUP 中的数据存档到 UDO.BACKUP_HIST。
【问题讨论】:
-
编辑您的问题并显示失败的代码。
-
当您使用 Db2-for-LUW 时,您不应使用或参考 Db2 for Z/OS 文档(因为可以应用不同的语法规则)。始终仅使用与您的 Db2 平台和版本正确匹配的 Db2 知识中心。