フィールドの入力値をチェックし、フィールドがNULLの場合は別の行の同じフィールドに置き換えるBEFORE INSERT
トリガーを作成しようとしています。しかし、私がCALL
ステートメントをトリガーに追加すると、エラー "The trigger "ORGSTRUCT.CSTCNTR_IN" is defined with an unsupported triggered SQL statement
"が返されます。ドキュメントをチェックして、カーソルがBEFORE(最初にストアドプロシージャを作成する理由の一部)でサポートされていないことを確認しましたが、ストアドプロシージャからカーソル宣言を削除しても、 。ストアド・プロシージャ・コール(DB2 LUW 9.5)を使用したINSERTトリガー
トリガー:
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
トリガーで許可されているので、私は問題が何であるかを理解していません。トリガ前