【问题标题】:DB2 For i - CREATE TRIGGER - SQL0206 - Column or global variable not foundDB2 For i - CREATE TRIGGER - SQL0206 - 未找到列或全局变量
【发布时间】: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 子句中命名。
- 如果该列旨在作为相关参考,请使用正确的表指示符限定该列。
- 如果该列打算作为全局变量,请使用全局变量所在的架构限定名称或确保架构在路径中。

参考网站:

【问题讨论】:

    标签: database triggers db2-400


    【解决方案1】:

    请尝试“长名称”而不是“短名称”,据我所知,它引用了 SYSCOLUMNS 表中的长名称 (COLUMN_NAME )。

    问候 罗兰

    【讨论】:

    • 耻辱,耻辱难以忍受。
    • @ZS6JCE,别难过。奇怪的是 SQL 触发器需要使用长名称。我想这有点道理。在触发器内部,您不处理表格。您正在处理数据缓冲区。系统只为元素生成一个名称。
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2020-01-15
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多