2014-02-10 62 views
6

下面的sntax接縫是正確的。在mysql上運行時出現錯誤如何在MYSQL中編寫嵌套if else

錯誤代碼:1064.您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在第27" 行使用「」附近正確語法手冊。

delimiter $$ 
    create function check2_login(p_username varchar(30),p_password varchar(30),role  varchar(20)) 
    returns bool 
    deterministic 
    begin 
declare loginstatus bool default false; 

if role="customer"then 
    select custid from customer where custid=p_username and pwd=p_password; 
    if !row_count()=0 then 
    select true into loginstatus; 
    end if; 
else if role="executive"then 
    select execid from executive where execid=p_username and pwd=p_password; 
    if !row_count()=0 then 
    select true into loginstatus; 
    end if; 
else if role="admin"then 
    select empid from employee where empid=p_username and pwd=p_password; 
    if !row_count()=0 then 
    select true into loginstatus; 
    end if; 
else 
    return loginstatus; 
end if; 
    return loginstatus; 
end $$ 
+0

打賭你希望你有一個登錄表... –

回答

10

更新您的存儲功能如下

DELIMITER $$ 
DROP FUNCTION IF EXISTS `check2_login`$$ 
CREATE FUNCTION `check2_login`(p_username VARCHAR(30),p_password VARCHAR(30),role VARCHAR(20)) RETURNS BOOL 
    BEGIN 
    DECLARE retval INT; 
      IF role = "customer" THEN 
       SELECT COUNT(custid) INTO retval FROM customer WHERE custid = p_username and pwd = p_password; 
       IF retval != 0 THEN 
        RETURN TRUE;  
       ELSE 
        RETURN FALSE;       
       END IF; 
      ELSEIF role = "executive" THEN 
       SELECT COUNT(execid) INTO retval FROM executive WHERE execid = p_username and pwd = p_password; 
       IF retval != 0 THEN 
        RETURN TRUE;  
       ELSE 
        RETURN FALSE;       
       END IF; 
      ELSEIF role = "admin" THEN 
       SELECT COUNT(empid) INTO retval FROM employee WHERE empid = p_username and pwd = p_password; 
       IF retval != 0 THEN 
        RETURN TRUE;  
       ELSE 
        RETURN FALSE;       
       END IF; 
      ELSE 
       RETURN FALSE;  
      END IF; 
    END$$ 
DELIMITER ; 

希望這將幫助你......!

+0

感謝您的幫助..... – user3239587

+0

如果這真的幫助你,那麼你應該接受這個答案... –

+0

如何在mysql函數中加入兩個表function.bcoz還有指定表也在那裏。 – user3239587

1

我想,也許你應該使用CASE聲明此過程

1
SELECT *, 
    IF(discount='0', 
     (IF(tax='0', discount_price, discount_price + (discount_price * (tax_rate/100)))), 
     (IF(tax='0', price, price + (price * (tax_rate/100)))) 
    ) AS price_last 
FROM products WHERE id=1