2013-03-29 185 views
3

嗨,我有一個學生表,其中我有像用戶名,usertype,密碼等列 我已經寫了一個觸發器,爲這個表創建一個用戶名爲usertype'學生'這裏是觸發代碼Sql觸發器不工作

> 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 ; 

這是工作之前,但現在它顯示出一些錯誤,指出,有近一個語法錯誤「==」學生')聲明我VARCHAR(2)。等我不知道如何解決它 請幫助您的寶貴答案。提前致謝。我試過「如果(usertype ='學生')THEN」,但它然後顯示錯誤消息像語法錯誤附近declare我varchar(2);

回答

3

當我瀏覽手冊上,我看不到任何==支持,

因此,在你TRIGGER,只應IF (usertype = 'Student') THEN

FULL觸發代碼

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 ; 
+0

我試過它然後它顯示語法錯誤附近declare我varchar(2); – Pranjut

+0

我更新了答案。聲明必須在聲明的第一部分,並且您在第一個「IF」語句中擁有「THEN」關鍵字。 –

+0

謝謝,這是我做的傻.. – Pranjut

1

你確定mysql允許==作爲相等運算符嗎?

+0

不,我不確定,謝謝。 – Pranjut

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

@KugathasanAbimaran我只是禮貌地告訴他,在mysql中沒有像==那樣的東西。希望他不會錯過我的觀點 – Brian