2013-11-22 105 views
0

我不明白爲什麼:(爲什麼我的程序不工作?

我不得不更新表產品,當我調用過程的參數(reference_requested,quantity_requested)和「返回」(我不怎麼做,我讀到的回報,而params,out和inout,但我並不十分了解)爲單位出售

delimiter && 
create procedure compra (@reference_requested varchar, @quantity_requested int) 
begin 
    if quantity >= quantity_requested then 
    update products 
    set quantity = quantity - quantity_requested 
    where reference_requested = reference; 
    return quantity_requested; 
    else 
    return quantity; 
    update products 
    set quantity = 0; 
    where reference_requested = reference; 
    end if; 
end 
&& 
+0

你在哪裏設置啓動「數量」的值? – 2013-11-22 03:54:08

+0

錯誤說的是什麼? –

+0

Sintax params中的錯誤 – user3006912

回答

0

編輯值:正如評論指出,你不能返回一個值(或在程序中使用return語句)如果你想這樣做,那麼你應該使用「create function」而不是「create procedure」並且另外指定一個返回數據類型

在您的「其他」中,「退貨數量」聲明應該是最後一個,就在「end if」之前,否則更新將不會運行。

+0

存儲過程沒有'RETURN'語句,只存儲函數。 –

+0

感謝您指出,我只是注意到了邏輯錯誤。我試圖在sqlfiddle中運行它,並且無論如何都無法編譯它,但我無法確切地確定它的用途。一般來說,更多的是Postgres/Oracle的人,從我的oracle天中發現程序比任何事物都更令人討厭,並且基本上停止寫它們來支持函數。對不起,錯過了明顯的。 –

0
... 
    create procedure compra(reference_requested varchar(50), quantity_requested int) 
    ... 
  • 是否聲明:
... 
    where reference_requested = reference; 
    ... 

reference_requested是指在表中的參數或列?避免 的名稱參數/變量等於表中的列,這可能導致 出現問題。

... 
    return quantity; 
    ... 

在用於存儲過程所使用的功能不被使用。

0
  1. 要從存儲過程返回值,請使用OUT參數。
  2. 除了已經提到的問題,你不能只是任意解決products表中的quantity列。它應該用在某些語句的上下文中(例如SELECT)。

現在你的程序的簡化版本,可能看起來像

DELIMITER $$ 
CREATE PROCEDURE compra 
(
    IN _ref_requested VARCHAR(32), 
    IN _qty_requested INT, 
    OUT _result INT 
) 
BEGIN 
    DECLARE qty INT DEFAULT 0; 

    SET qty = 
    (
    SELECT quantity 
     FROM products 
    WHERE reference = _ref_requested 
    LIMIT 1 
); 

    SET qty = IF(qty > _qty_requested, _qty_requested, qty); 

    UPDATE products 
    SET quantity = quantity - qty 
    WHERE reference = _ref_requested; 

    SET _result = qty; 
END$$ 
DELIMITER ; 

爲了能夠讓你不得不使用變量用戶

SET @result = NULL; 
CALL compra('REF001', 25, @result); 
SELECT @result; 

這裏的OUT參數的值是SQLFiddle demo

+0

@ user3006912有幫助嗎?你的問題需要更多幫助嗎? – peterm

相關問題