同样一个存储过程 例如:
CREATE  PROCEDURE `test`(IN userid int,OUT l int)
begin
set l = 5;
end然后我在触发器里 去调用这个存储过程 如下:create trigger setlevel before update on uchome_space
FOR EACH ROW  
begin
    declare le int default 0;
    if old.experience <> new.experience then 
call test(new.uid,@le);
                set new.level = le;
           end if;
end但是触发器每次触发的时候 总是得到的le是0 ,如果去掉前面的@就会得到正确的值,我的问题是这个@在什么情况下用,什么时候不用吗?我在网上查了下,没有查到满意的答案,或许是我没有表达清楚。
各路英雄 如有知道者,望能不吝赐教。

解决方案 »

  1.   


    create trigger setlevel before update on uchome_space
    FOR EACH ROW  
    begin
        declare le int default 0;
        if old.experience <> new.experience then 
        call test(new.uid,@le);
                    set new.level = @le;
               end if;
    end这样才正确吧。
    @le这个是用户变量,你上面写的那个set new.level = le,根本没有取到这个用户变量呀。LE默认是0,就永远是0。
      

  2.   

    create trigger setlevel before update on uchome_space
    FOR EACH ROW  
    begin
        declare le int default 0;
        if old.experience <> new.experience then 
        call test(new.uid,le);
                    set new.level = le;
               end if;
    end