Mysql 创建触发器-声明时出错

Mysql 创建触发器-声明时出错,mysql,sql,triggers,phpmyadmin,declare,Mysql,Sql,Triggers,Phpmyadmin,Declare,我学习触发器 我有: create trigger bi_emps_fer before insert on emps for each row begin declare newsal numeric default 0; declare namelength, l_loop int default 0; set namelength = length(new.emp_name); while l_loop < namelength do

我学习触发器 我有:

create trigger bi_emps_fer before insert on emps for each row
begin

    declare newsal numeric default 0;
    declare namelength, l_loop int default 0;

    set namelength = length(new.emp_name);

    while l_loop < namelength do

       set newsal := newsal   new.salary;

       set l_loop := l_loop   1;

    end while;

    set new.salary = newsal;

end
insert on emps前为每行创建触发器bi\u emps\fer
开始
声明newsal数值默认值为0;
声明namelength,l_循环int默认值为0;
设置名称长度=长度(新的emp_名称);
而l_循环<名称长度
设置newsal:=newsal new.salary;
设置l_循环:=l_循环1;
结束时;
设置new.salary=newsal;
结束
和错误:

1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器 要使用的正确语法的版本 在第4行的“”附近

为什么??
我使用MySQL 5.5.8和phpmyadmin 3.3.9

您指定了分隔符吗

delimiter #

create trigger bi_emps_fer before insert on emps for each row
begin

    declare newsal decimal(10,2) default 0;

    // do sql stuff here but not what you're doing !

    set new.salary = newsal;

end#

delimiter ;

您指定了分隔符吗

delimiter #

create trigger bi_emps_fer before insert on emps for each row
begin

    declare newsal decimal(10,2) default 0;

    // do sql stuff here but not what you're doing !

    set new.salary = newsal;

end#

delimiter ;

您是否尝试在不同的行上声明namelength和l_循环?是的,但错误是这一行:“declare newsal numeric default 0;”
0
是否可以作为numeric的默认值?您是否必须说
0.0
?您是否尝试在不同的行上声明namelength和l_循环?是的,但错误是这一行:“declare newsal numeric default 0;”
0
是否可以作为numeric的默认值?你一定要说
0.0
?@TrueBlue10我明白。有时候,我也会让这些鳄鱼追我,直到我能正确地创建phpmyadmin触发器,它们才会停下来。@TrueBlue10我明白。有时候,我也会让这些鳄鱼追我,直到我能正确地创建phpmyadmin触发器,它们才会停下来。