我想创建一个BEFORE INSERT
触发,将检查字段的输入值,而在另一行具有相同的字段替换它,如果该字段为空。但是,当我将CALL
语句添加到我的触发器时,将返回错误“The trigger "ORGSTRUCT.CSTCNTR_IN" is defined with an unsupported triggered SQL statement
”。我查看了文档,发现在BEFORE(首先制作存储过程的部分原因)中不支持游标,但即使我从存储过程中删除了游标声明,该调用仍会生成相同的错误。BEFORE INSERT触发器和存储过程调用(DB2 LUW 9.5)
触发:
CREATE TRIGGER orgstruct.cstcntr_IN
NO CASCADE
BEFORE INSERT ON orgstruct.tOrgs
REFERENCING NEW AS r
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
DECLARE prnt_temp BIGINT;
DECLARE cstcntr_temp CHAR(11);
SET prnt_temp = r.prnt;
SET cstcntr_temp = r.cstcntr;
CALL orgstruct.trspGetPrntCstCntr(prnt_temp,cstcntr_temp);
SET r.cstcntr = cstcntr_temp;
END
存储过程:
CREATE PROCEDURE orgstruct.trspGetPrntCstCntr (
IN p_prnt BIGINT,
OUT p_cstcntr CHAR(11)
)
SPECIFIC trGetPrntCstCntr
BEGIN
IF p_prnt IS NULL THEN
RETURN;
END IF;
BEGIN
DECLARE c1 CURSOR
FOR
SELECT cstcntr
FROM orgstruct.tOrgs
WHERE id = p_prnt
FOR READ ONLY;
OPEN c1;
FETCH FROM c1 INTO p_cstcntr;
CLOSE c1;
END;
END
根据该文件,CALL
被允许在BEFORE
触发,所以我不明白是什么问题。