2010-05-12 59 views
6

我正在尋找在IF THEN語句中使用邏輯運算符的正確語法(如果在MySQL存儲過程中可能的話)。以下是我想要做的事情,但我不確定是否應該鍵入「OR」或「||」在IF ... THEN子句中:MySQL存儲過程:IF中的布爾邏輯然後

DELIMITER $$ 

CREATE PROCEDURE `MyStoredProc` (_id INT) 
BEGIN 

    DECLARE testVal1 INT DEFAULT 0; 
    DECLARE testVal2 INT DEFAULT 0; 

    SELECT value1, value2 INTO testVal1, testVal2 
    FROM ValueTable 
    WHERE id = _id; 

IF testVal1 > 0 OR testVal2 > 0 THEN 

    UPDATE ValueTable 
     SET value1 = (value1+1) 
    WHERE id=_id; 

END IF; 

END$$ 

回答

0

我沒有用存儲過程試過,但「或」適用於觸發器。這裏有一個工作片斷出來的一些現有的生產代碼:

CREATE TRIGGER `update_inventory` AFTER INSERT ON `order_updates` FOR EACH ROW 
begin 
    if new.type = 'received' or new.type = 'used' or new.type = 'returned' then 
... 
0

我只是想你的程序,以確保它的工作原理,以及它的作用。另外,你應該考慮指定變量類型的長度,例如。 INT(10)。

兩者OR||運營商是否正確(如在Reference Manual說明)。

+0

嘗試,但沒有工作 – 2011-06-06 06:54:40

+0

你得到了什麼樣的錯誤消息(代碼)? 'OR'和'||'運算符都是正確的。 – rekaszeru 2011-06-06 06:59:49

0

我認爲你應該改變代碼來處理NULL值的可能性(這可能是你正在經歷的錯誤的隱藏原因)。

例如:

IF (testVal1 IS NOT NULL AND testVal1 > 0) OR (testVal2 IS NOT NULL AND testVal2 > 0) THEN 

    UPDATE ValueTable 
     SET value1 = (value1+1) 
    WHERE id=_id; 

END IF;