如何声明 temp
变量,虽然我已经研究过语法,并且根据我的说法,它是正确的,但它也显示错误:未定义的 temp 和 t。
CREATE TRIGGER check_reciever BEFORE INSERT
ON one_to_one FOR each row
BEGIN
select employee_id into temp from employee_master where employee_id = NEW.reciever_id;
IF temp!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
ELSE
select count(*) into t from parent_master where parent_id=new.reciever_id;
IF t!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
END IF;
END IF;
END
最佳答案
您缺少一个用于声明变量的 DECLARE
子句(可以从其名称中猜出):
CREATE TRIGGER check_reciever BEFORE INSERT
ON one_to_one FOR each row
-- Begining of the DECLARE section you're missing
DECLARE
temp NUMBER;
t NUMBER;
-- End of the missing section
BEGIN
select employee_id into temp from employee_master where employee_id = NEW.reciever_id;
IF temp!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
ELSE
select count(*) into t from parent_master where parent_id=new.reciever_id;
IF t!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
END IF;
END IF;
END
编辑:上面是一个 Oracle 解决方案,根据 OP 的标签。对于 MySQL,DECLARE
语法略有不同:
CREATE TRIGGER check_reciever BEFORE INSERT
ON one_to_one FOR each row
BEGIN
-- Declarations
DECLARE temp NUMERIC;
DECLARE t NUMERIC;
-- End declarations
select employee_id into temp from employee_master where employee_id = NEW.reciever_id;
IF temp!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
ELSE
select count(*) into t from parent_master where parent_id=new.reciever_id;
IF t!=0 THEN
insert into one_to_one values(new.message_id,new.reciever_id,new.read);
END IF;
END IF;
END
关于mysql - 触发器中变量的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348943/