【问题标题】:Sql trigger not not workingsql触发器不起作用
【发布时间】:2013-03-29 03:36:40
【问题描述】:

您好,我有一个学生表,其中有用户名、用户类型、密码等列。 我为这个表写了一个触发器,它为用户类型“学生”创建了一个用户名,这里是触发器代码

> DROP TRIGGER `sasis`.`USERNAMEAutoGen`;

DELIMITER ||

CREATE TRIGGER `sasis`.`USERNAMEAutoGen` 
BEFORE INSERT ON `sasis`.`userinfo` 
FOR EACH ROW BEGIN  
    if (usertype== 'Student')
      declare i varchar(2);
      declare usrnm varchar(20);
      declare fullusrnm varchar(255);
      declare curyr varchar(10);
      declare curm varchar(10);
      declare rcount varchar(50);
      set i='I';
      select date_format(now(),'%y') into curyr;
      select date_format(now(),'%b') into curm;
      set usrnm=concat(i,curyr,upper(curm));
      select count(*) into rcount from userinfo where username like concat(usrnm,'%');
      if(rcount<9) then
        set rcount=concat('0000',(rcount+1));
      elseif (rcount<99) then
        set rcount=concat('000',(rcount+1));
      elseif (rcount<999) then
        set rcount=concat('00',(rcount+1));
      end  if;
      set fullusrnm=concat(i,curyr,upper(curm),rcount);
       if (new.username is null or trim(new.username)='') then
        set NEW.username=fullusrnm;
      end if;   end if; END||

DELIMITER ;

它以前可以工作,但现在显示一些错误,表明'=='Student'附近存在语法错误)声明i varchar(2)。等等,我不知道如何解决它 请帮助您提供宝贵的答案。提前致谢。

我也尝试过使用“if (usertype= 'Student') THEN”,但是它在 declare i varchar(2); 附近显示语法错误之类的错误消息;

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    当我浏览手册时,我看不到任何支持的==

    所以在你的TRIGGER 中,应该只有IF (usertype = 'Student') THEN

    完整的触发代码

    CREATE TRIGGER `sasis`.`USERNAMEAutoGen` 
    BEFORE INSERT ON `sasis`.`userinfo` 
    FOR EACH ROW 
    BEGIN  
    
        declare i varchar(2);
        declare usrnm varchar(20);
        declare fullusrnm varchar(255);
        declare curyr varchar(10);
        declare curm varchar(10);
        declare rcount varchar(50);
    
        IF (usertype== 'Student') THEN
    
            set i='I';
            select date_format(now(),'%y') into curyr;
            select date_format(now(),'%b') into curm;
            set usrnm=concat(i,curyr,upper(curm));
            select count(*) into rcount from userinfo where username like concat(usrnm,'%');
    
            if(rcount<9) then
                set rcount=concat('0000',(rcount+1));
            elseif (rcount<99) then
                set rcount=concat('000',(rcount+1));
            elseif (rcount<999) then
                set rcount=concat('00',(rcount+1));
            end  if;
    
            set fullusrnm=concat(i,curyr,upper(curm),rcount);
            if (new.username is null or trim(new.username)='') then
                set NEW.username=fullusrnm;
            end if; 
    
          end if; 
    END||
    
    DELIMITER ; 
    

    【讨论】:

    • 我在此之前尝试过它在 declare i varchar(2); 附近显示语法错误;
    • 我更新了答案。声明必须在语句的第一部分,并且您在第一个 IF 语句中有 THEN 关键字。
    【解决方案2】:

    你确定 mysql 允许 == 作为相等运算符吗?

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
    • @KugathasanAbimaran 我只是礼貌地告诉他 mysql 中没有 == 这样的东西。希望他没有错过我的观点
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多