Mysql

儲存過程無法比較

  • March 30, 2016

嗨,我嘗試實現以下儲存過程,它總是將我的 if 條件設為 true 並實現。

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertOpen`(in uid varchar(11),in S_ID varchar(20))
BEGIN
   if(SELECT COUNT(Slot_ID) FROM smart_scheduler1.work_schedule where Employee_ID=uid AND Schedule_ID=S_ID = 0) THEN

       UPDATE `smart_scheduler1`.`work_schedule` SET `Employee_ID`=uid WHERE `Schedule_ID`=S_ID;
       ELSE
       SELECT COUNT(Slot_ID) FROM smart_scheduler1.work_schedule where Employee_ID=uid AND Schedule_ID=S_ID;

END IF;
END

我的問題是,如果條件,我如何將查詢與儲存過程中的值或整數進行比較?

我是數據庫新手,請幫助我。如果你能給我一個關於儲存過程的好教程,我會非常高興,因為我無法在網上找到很多關於儲存過程的材料。

您的if條件實際上應該幾乎總是如此false,除非您有一個條目 where schedule_id = 0

這可能令人驚訝,但在 MySQL 中,您可以編寫如下內容:

root@localhost:(none) > select 1=1=1;
+-------+
| 1=1=1 |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

root@localhost:(none) > select 1=1=2;
+-------+
| 1=1=2 |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)

因此,在您的情況下,您實際上並沒有比較任何if情況,只有一個返回數字的查詢。if條件是只要true不是0

這裡的解決方案是使用括號。

IF((SELECT COUNT(Slot_ID) FROM smart_scheduler1.work_schedule where Employee_ID = uid AND Schedule_ID = S_ID) = 0) THEN

或者你可以做

IF NOT EXISTS(SELECT Slot_ID FROM smart_scheduler1.work_schedule where Employee_ID = uid AND Schedule_ID = S_ID) THEN

我個人(NOT) EXISTS非常喜歡使用,不僅因為它很容易閱讀,而且EXISTS一旦找到條目就停止並且直到最後才繼續搜尋,儘管確切的數字不感興趣。

如果確切的數字很重要,您當然也可以使用如下變數:

SELECT @my_variable := COUNT(Slot_ID) FROM smart_scheduler1.work_schedule where Employee_ID=uid AND Schedule_ID=S_ID
IF(@my_variable = 0) THEN

要麼

DECLARE my_variable INT;
SELECT COUNT(Slot_ID) INTO my_variable FROM smart_scheduler1.work_schedule where Employee_ID=uid AND Schedule_ID=S_ID
IF(my_variable = 0) THEN

您可以在此處此處了解這兩種變數的差異。

引用自:https://dba.stackexchange.com/questions/133739