DB2触发器问题

f0brbegy  于 2023-01-13  发布在  DB2
关注(0)|答案(1)|浏览(232)

DB2大型机版本12。
我们有一个不同应用程序插入的表。这些应用程序都有field1值,但可能没有field2。可以使用field1从另一个现有表中检索field2。因此,为了从现有表中更新field2,我们尝试了以下触发器:

CREATE TRIGGER GENTRIGG                                 
NO CASCADE BEFORE INSERT ON Table1
REFERENCING NEW AS NNN                                       
FOR EACH ROW                                                 
BEGIN                                                        
SELECT Table2.field2  INTO NNN.field2 FROM
Table2
WHERE Table2.field1  = NNN.field1
FETCH First 1 rows only;                           
END

也尝试过

CREATE TRIGGER GENTRIGG                                      
NO CASCADE BEFORE INSERT ON Table1
REFERENCING NEW AS NNN                                        
FOR EACH ROW                                                 
BEGIN                                                        
SELECT Table2.field2  INTO NNN.field2 FROM
Table2
WHERE Table2.field1  = NNN.field1 AND
Table2.field3  = ‘0’;
END

其中field3 = 0将仅返回一行。
也尝试了带ATOMIC的MODE DB2SQL。但所有这些都失败了,原因如下:
DSNT408I数据库代码= -104,错误:非法符号""。一些
可能合法的符号有:年月日年月日小时减
或者类似的东西。
短暂性脑缺血发作
期望触发器创建工作,但它没有。继续得到-104

tzdcorbm

tzdcorbm1#

你的意思是这样的:

CREATE TRIGGER GENTRIGG    
NO CASCADE BEFORE INSERT ON Table1
REFERENCING NEW AS NNN    
FOR EACH ROW    
BEGIN    
  if NNN.field2 IS NULL
  then
    set NNN.field2 = (Select field2 
                      from Table2 
                      where field2 = NNN.field1 
                      fetch first 1 rows only);
  end if; 
END

如果子查询也返回null,您应该考虑使它更具防御性。
要执行上述操作,需要正确配置用于将SQL提交到数据库的工具,以便在块的末尾(触发器的END之后)使用替代分隔符。

相关问题