2014-01-25 31 views
0

变量如何声明temp变量,虽然我根据我已经学习语法,而且,它是正确的,但后来太,它显示错误:Undefined temp and 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 

回答

0

你错过了其被用于声明变量(如可从它的名字被猜到)的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 

EDIT:以上是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 
+0

您的解决方案给了我以下错误:MySQL表示:文件 #1064 - 你在你的SQL语法错误;请检查对应于您的MySQL服务器版本的手册,以找到正确的语法,以便在第4行'DECLARE temp NUMBER'处使用 – smily

+0

您的文章标记为[tag:oracle]和[tag:plsql],而不是[tag:mysql] ,所以我回答Oracle。让我们尝试鞭打一些... – Mureinik

+0

...在这里,检查出 – Mureinik