A перед триггером может вызвать хранимую процедуру, но сохраненный процесс не может делать ничего, что не разрешено в триггере.
В вашем случае уровень доступа к данным по умолчанию для хранимой процедуры SQL - MODIFIES SQL DATA
, что не разрешено в триггере. Вы можете воссоздать вашу хранимую процедуру, изменив уровень доступа к данным на READS SQL DATA
; это позволит вам создать триггер.
Однако: нет причины вызывать хранимую процедуру для чего-то такого простого; Вы можете сделать это с помощью простого встроенного триггера:
create trigger orgstruct.cstcntr_IN
no cascade
before insert on orgstruct.tOrgs
referencing new as r
for each row
mode db2sql
set r.cstcntr = case
when r.p_prnt is not null
then (select cstcntr from tOrgs where id = r.p_prnt fetch first 1 row only)
else r.cstcntr
end;
Это будет ОЧЕНЬ более эффективно, поскольку устраняет как вызов хранимой процедуры, так и обработку курсора внутри хранимого процесса. Даже если вы хотите использовать хранимый процесс, вы можете устранить курсор внутри хранимого процесса и повысить производительность.
К вашему сведению: опубликованная вами логика содержит ошибку и всегда будет устанавливать для CSTCNTR значение NULL. Триггер, размещенный в этом ответе, не делает этого. : -)