2016-02-29 71 views
0
CREATE PROCEDURE `checkAdminAccess` 
(
IN accountID INT 
) 
BEGIN 
DECLARE staffID INT; 
#DECLARE num INT;  

SELECT StaffID INTO staffID 
    FROM staff 
WHERE AccountID = accountID 
    AND IsAdmin = 1; 

SELECT staffID; 

IF (staffID IS NULL) THEN 
    CALL raise(1356, 'Admin access required.');  
END IF; 

END; 

對於任何輸入,我都將staffID設置爲NULL。 例如:Mysql變量值爲空

call checkAdminAccess(3); #returns null 
call checkAdminAccess(6); #returns null 

而且我下面的數據是:

INSERT INTO `staff` (`StaffID`,`AccountID`,`RoleID`,`ManagerID`,`IsAdmin`) VALUES (1,3,1,1,0); 
INSERT INTO `staff` (`StaffID`,`AccountID`,`RoleID`,`ManagerID`,`IsAdmin`) VALUES (2,6,2,1,1); 

誰能告訴我怎麼做選擇一個值到MySQL中的變量?

+0

[MySQL Select into variable]可能的重複(http://stackoverflow.com/questions/13351479/mysql-select-into-variable) – Barett

回答

0

問題是您檢查過程的返回值,該過程必須爲空,因爲過程不會返回任何值。它最大返回一個結果集。

可能的解決方案:

  1. 更改過程function,即返回,STAFFID。
  2. 將過程參數添加到過程並使用它來檢索staffid。上面的鏈接也描述瞭如何做到這一點。
+0

原始意圖是拋出錯誤,而不是選擇StaffID。 'SELECT staffID;'僅用於調試目的。我想在staffID爲空(而不是管理員)時拋出錯誤。所以在這種情況下,爲兩種情況都調用raise方法,這是不希望的。我有微軟的SQL Server背景,這將工作正常。我想知道在Mysql中是否有相同的選擇方式。我也在考慮功能選項。謝謝。 –

+0

select into部分適用於您的代碼。我不懂你的問題。 – Shadow