2011-10-27 47 views
0

我是Mysql的新手。我想創建一個存儲過程來更新產品的價格。我使用jdbc來實現這個存儲過程。但是我的存儲過程命令失敗了很多次。以下是mysql代碼。 「p」表示產品,「des」表示價格下降,「pro」表示產品名稱。 Java中的CallableStatement會給出產品名稱和產品價格的下降。因此,存儲過程將降低相應產品的價格。Mysql命令無法實現存儲過程

`CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT)` 
` 
BEGIN` 
    UPDATE customers 
    `DECLARE p INT;` 
    `SET p = (SELECT price FROM customers WHERE product= pro);` 
    `SELECT p;` 
    `p = p - des;` 
END 
+0

您的存儲過程沒有意義。 1.您正在從一個名爲customers的表格中選擇價格(這是否正確?)2.'p = p - des'是在'CHAR'上執行的所有操作,如果您想要減去它們,您需要使它們成爲某種類型的數值。 3.我假設你想在某個時候更新一個表,並且我沒有在任何地方看到任何'update'語句。請澄清一點你的目標。 – Icarus

+0

Thx回覆。顧客是桌子,價格是它的屬性。 – user1015798

回答

0

我想這是所有你需要:

DELIMITER $ 

CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT) 

BEGIN 
    UPDATE customers 
    SET price = price-des 
    WHERE product= pro; 

END$ 

DELIMITER ; 

應由傳遞作爲參數的減少量減少目前的價格。

一個建議:不要說你的程序updateP使用全名,如sprocUpdateProductUpdateProduct_sp;如果明天你需要更新一個人,你不再知道updateP是否更新PersonProduct。變量也是一樣,使用全名。

+0

thx,但是我需要在任何地方添加分號嗎? – user1015798

+0

@ user1015798我在'Where'子句後面加了一個分號。說實話,自從我沒有在MySQL上寫一個存儲過程已經有6年多了,但據我所知,你只需要我放置它的分號。也許這裏的其他人可以證實? – Icarus

+0

@伊卡洛斯你確實需要一個分號。只要記住在程序代碼之前和之後將分隔符設置爲除分號以外的其他內容作爲腳本的一部分。我會嘗試編輯您的帖子。 –