Параметр OUT status
в процедуре отличается от пользовательской переменной @status
. Это всего два разных типа переменных.
Итак, процедура должна выглядеть следующим образом:
create procedure Test_BEFORE_UPDATE_TEST (
IN id int(5),
OUT status enum('pass', 'fail')
)
begin
set status = 'pass';
END;
В триггере также следует использовать обычные переменные, объявленные с DECLARE
:
create trigger BEFORE_UPDATE_TEST
before update on test for each row
begin
declare v_status enum('pass', 'fail');
call Test_BEFORE_UPDATE_TEST(old.id, v_status);
if (v_status is not null and v_status <> new.status) then
set new.status = v_status;
end if;
end;