-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

MySQL5.6リファレンスマニュアルの§13.1.4「構文」によるとALTER PROCEDURE

ALTER PROCEDURE[…][ ]ステートメントを使用してストアドプロシージャのパラメータまたは本体を変更することはできません。このような変更を行うには、とを使用してプロシージャを削除して再作成する必要がありDROP PROCEDUREますCREATE PROCEDURE

于 2012-10-05T17:44:01.530 に答える
0

ALTER PROCEDURE を使用してプロシージャの本体を変更することはできないため、同じものを削除して再作成するか、または EDIT/UPDATE Mysql ストアド プロシージャにいくつかの GUI ツールを使用する必要があります。

ex. alter procedure employeetest sql security invoker;

注* SECURITY TYPE は INVOKER や DEFINER のように変更できます

GUI ツール フリーウェア: Mysql の TOAD。

于 2012-10-05T17:47:31.230 に答える