【发布时间】:2015-12-11 08:22:02
【问题描述】:
请求:
请解释为什么 CREATE TRIGGER 语句会抛出
SQL0206 - 未找到列或全局变量 PACKED_FLD
示例代码:
CREATE TABLE TST_TABLE (
CHAR_FLD_ALIAS FOR COLUMN CHAR_FLD CHAR(9) CCSID 37 NOT NULL DEFAULT '',
PACKED_FLD_ALIAS FOR COLUMN PACKED_FLD DECIMAL(9, 0) NOT NULL DEFAULT 0,
ZONED_FLD_ALIAS FOR COLUMN ZONED_FLD NUMERIC(9, 0) NOT NULL DEFAULT 0 ,
DATE_FLD_ALIAS FOR COLUMN DATE_FLD DATE NOT NULL DEFAULT CURRENT_DATE,
TIME_FLD_ALIAS FOR COLUMN TIME_FLD TIME NOT NULL DEFAULT CURRENT_TIME,
TSTAMP_FLD_ALIAS FOR COLUMN TSTAMP_FLD TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY( CHAR_FLD_ALIAS ) )
CREATE TRIGGER TST_TRGPGM_LONG_NAME
NO CASCADE
BEFORE INSERT ON TST_TABLE
REFERENCING OLD AS o NEW AS n
FOR EACH ROW MODE DB2ROW
PROGRAM NAME TST_TRGPGM
BEGIN
SET n.PACKED_FLD = 999;
END
完整的错误信息:
消息 ID 。 . . . . . : SQL0206 严重性。 . . . . . . : 30 消息类型。 . . . . : 诊断
消息。 . . . : 未找到列或全局变量 PACKED_FLD。
原因 。 . . . . : 未找到 PACKED_FLD 作为表 *N 的列 在 *N 中,并且在 *N 中没有作为全局变量找到。如果表是 *N,PACKED_FLD 不是任何可以引用的表或视图的列。恢复。 . . :执行以下操作之一,然后重试请求:
- 确保在语句中正确指定列名和表名。
- 如果这是一个 SELECT 语句,请确保所有必需的表都在 FROM 子句中命名。
- 如果该列旨在作为相关参考,请使用正确的表指示符限定该列。
- 如果该列打算作为全局变量,请使用全局变量所在的架构限定名称或确保架构在路径中。
参考网站:
【问题讨论】: