Mysql
儲存過程無法比較
嗨,我嘗試實現以下儲存過程,它總是將我的 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
,除非您有一個條目 whereschedule_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