mysql - 触发器中变量的声明

标签 mysql triggers

如何声明 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/

相关文章:

php - 使用cookie,当用户查看页面时将db中的 "unviewed"更改为 "viewed"

mysql - MYSQL中如何返回多个结果集或字符串数​​组

mysql - 使用 mysql 触发器在更新事件后备份行

mysql - 在 SQL 触发器中插入用户 ID

mysql - 删除相似记录时我的 SQL 查询出错

php - 在数据库中保存和编辑数组的最佳方法是什么(json、序列化或文本)

sql-server - SQL Server : get at the name of the app causing an update in a trigger

wpf - XAML 触发器作为静态资源

mysql - WordPress 自定义查询

sql - 如何创建通用 SQL Server 存储过程以根据触发器中的插入和删除执行插入到审计表中