2017-08-22 42 views
-1

我已經在MySQL中創建過程來維護庫存。在這裏如何工作,如果用戶想維護股票關閉和賣出更新,否則只有賣出更新,這是MySQL程序維護股票,這是行不通的,返回0行受到影響,我已經檢查了所有數據在表中爲此工作,但仍無法正常工作:這個MySQL程序出了什麼問題?

BEGIN 
WHILE (qqty > 0) DO 

IF (maintainStock = 1) THEN 
    SET @date1 = (SELECT MIN(expiry_date) FROM `stock_current` WHERE closing > 0); 
    UPDATE `stock_current` SET sold = sold + 1, closing = closing - 1 WHERE item_id = iid AND expiry_date = @date1; 
    SET qqty = qqty - 1; 

ELSE 
    SET @date2 = (SELECT MIN(expiry_date) FROM `stock_current`); 
    UPDATE `stock_current` SET sold = sold + 1 WHERE item_id = iid AND expiry_date = @date2; 
    SET qqty = qqty - 1; 

END IF; 
END WHILE; 
END 
+0

添加更多的細節,請問'qqty'和'maintainStock'是定義的,還是它們的參數? – Jacky

+0

它們是參數。 – AshutoshSurya007

回答

1

有多種問題的代碼:

  1. 你混合用戶定義的會話變量與存儲過程。這可能會導致副作用,因爲這些變量可以通過會話中的任何代碼進行修改。你希望在存儲過程中聲明你的變量而不需要@

  2. @q變量未設置在任何地方。這意味着if永遠不會被執行或者你得到一個無限循環。我甚至不知道爲什麼你的代碼中有一個循環。

  3. 兩個日期變量被設置爲整個表的最小日期。但是,在update聲明中,您可以將它們與where子句中的itemid一起使用。您無法確定最低日期 - itemid對確實存在。

  4. 您沒有包含存儲過程的定義,所以我無法評論參數。

+0

謝謝你,幫助了很多。 – AshutoshSurya007