DB2 For i - CREATE TRIGGER - SQL0206 - 未找到列或全局变量

时间:2015-12-11 08:22:02

标签: database triggers db2-400

请求:

请解释为什么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子句中指定了所有必需的表        - 如果要将列作为相关参考,请使用正确的表格标识符对列进行限定        - 如果该列旨在成为全局变量,则使用全局变量所在的模式限定名称,或者确保模式位于路径中。

参考网站:

1 个答案:

答案 0 :(得分:3)

请尝试"长名"而不是"短名称",就我可以重新调用而言,它引用了SYSCOLUMNS表中的长名称(COLUMN_NAME)。

此致 罗兰