-1

成功创建后,我尝试更改存储过程。

DELIMITER $$
ALTER PROCEDURE `purchaseItem`(
      IN productID INT, 
      IN quantity INT,  
      IN memID INT,
      OUT stat INT)
BEGIN
            DECLARE qnty INT;
            DECLARE price decimal(10,2);
            DECLARE description VARCHAR(500);

            SET qnty = (SELECT p_Unit FROM product WHERE p_ID = productID);
            IF qnty >= quantity && qnty != 0 THEN
                SELECT p_Price INTO price FROM product WHERE p_ID = productID;
                                SELECT p_Desc INTO description FROM product WHERE p_ID = productID;
                INSERT INTO purchase VALUES 
                      (NULL, productID, quantity, price, description , memID, 0, NULL);
                UPDATE product 
                SET p_Unit = (qnty - quantity) 
                WHERE p_ID = productID;
                SET stat = 0;
            ELSE
                SET stat = 1;
            END IF;


    END$$

DELIMITER ;

但是,在尝试更改 SP 时出现以下错误。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( IN productID INT, IN quantity INT, IN memID INT, ' at line 1

有人可以指出我在哪里做错了。谢谢!

4

2 回答 2

1

根据MySQL 5.6 参考手册中的第13.1.4 节“ALTER PROCEDURE语法”

[...] 您不能使用 [the ALTER PROCEDURE] 语句更改存储过程的参数或主体;DROP PROCEDURE要进行此类更改,您必须使用和删除并重新创建过程CREATE PROCEDURE

于 2012-10-05T17:44:01.530 回答
0

由于您无法使用 ALTER PROCEDURE 更改程序主体,因此您必须删除并重新创建相同的程序或使用一些 GUI 工具来编辑/更新 Mysql 存储过程。

ex. alter procedure employeetest sql security invoker;

注意*您可以更改安全类型,例如..INVOKER 或 DEFINER

GUI 工具免费软件:Mysql 的 TOAD。

于 2012-10-05T17:47:31.230 回答