Я пытаюсь создать триггер BEFORE INSERT
, который будет проверять входящее значение поля и заменять его тем же полем в другой строке, если это поле равно нулю. Однако, когда я добавляю оператор CALL
в свой триггер, возвращается ошибка "The trigger "ORGSTRUCT.CSTCNTR_IN" is defined with an unsupported triggered SQL statement
". Я проверил документацию и увидел, что курсоры не поддерживались в BEFORE (часть причины создания хранимой процедуры в первую очередь), но даже когда я удаляю объявление курсора из хранимой процедуры, вызов по-прежнему генерирует ту же ошибку .
Курок:
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
Согласно документации, в триггере BEFORE
разрешено CALL
, поэтому я не понимаю, в чем проблема.