2014-02-10 64 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