如何在MySQL中修改存储过程

19

如何在MySQL中修改存储过程。

DROP PROCEDURE IF EXISTS sp_Country_UPDATE; 
CREATE PROCEDURE sp_Country_UPDATE 
  ( IN p_CountryId int, 
    IN p_CountryName nvarchar(25), 
    IN p_CountryDescription nvarchar(25), 
    IN p_IsActive bit, 
    IN p_IsDeleted bit ) 
  UPDATE 
    Country 
  SET 
    CountryName = p_CountryName , 
    CountryDescription=p_CountryDescription, 
    IsActive= p_IsActive, 
    IsDeleted=p_IsDeleted 
  WHERE 
    CountryId = p_CountryId ;

如何修改这个存储过程?


取决于你的存储过程和你尝试了什么? - Sterling Archer
我需要更改Mysql存储过程的语法。 - Tejaswi
1
http://dev.mysql.com/doc/refman/5.0/en/alter-procedure.html 给你。 - Sterling Archer
如果存在,则删除存储过程 sp_Country_UPDATE; 创建存储过程 sp_Country_UPDATE ( IN p_CountryId int, IN p_CountryName nvarchar(25), IN p_CountryDescription nvarchar(25), IN p_IsActive bit, IN p_IsDeleted bit
) 更新 Country 表 SET
CountryName = p_CountryName , CountryDescription=p_CountryDescription, IsActive= p_IsActive, IsDeleted=p_IsDeleted WHERE CountryId = p_CountryId ;
- Tejaswi
这里有一篇关于MySQL存储过程的绝佳教程。 - RN Kushwaha
显示剩余3条评论
3个回答

23
如果你想编辑存储过程,根据MySQL文档,是不允许的:
这个语句可以用来改变存储过程的特性。一个ALTER PROCEDURE语句中可以指定多个修改。然而,你不能使用这个语句来改变存储过程的参数或主体;如果要做出这样的更改,必须使用DROP PROCEDURE和CREATE PROCEDURE命令来删除并重新创建存储过程。
Alter语法可以让你改变“特性”,但不能改变实际的存储过程本身。

http://dev.mysql.com/doc/refman/5.0/en/alter-procedure.html

以下是创建、修改(注释)然后删除并重新创建的示例:

这是一个创建、修改(注释)然后删除并重新创建的示例:

DROP PROCEDURE myFunc;

DELIMITER //

CREATE PROCEDURE myFunc ()
COMMENT 'test'
BEGIN
SELECT 5;
END //

DELIMITER ;

ALTER PROCEDURE myFunc
COMMENT 'new comment';

CALL myFunc();

DROP PROCEDURE myFunc;

DELIMITER //

CREATE PROCEDURE myFunc ()
COMMENT 'last time'
BEGIN
SELECT 6;
END //

DELIMITER ;

CALL myFunc();

以上的CALL myFunc()语句将返回5,然后返回6。
查看存储过程将显示一个注释,根据您查看过程体的时间而定,“test”,“new comment”或“last time”(我不确定如何通过CLI查看注释,但我可以在Navicat的functions选项卡中看到它们)。

因此,我们无法使用ALTER命令修改存储过程的主体或添加/删除输入参数。为此,我们需要删除现有的存储过程,然后重新创建它。 - bikashphp
不是根据文档的规定,除非自从我三月份回答之后有任何更改。 - Pete
这比Sql Server难多了。 - live-love

1
ALTER PROCEDURE proc_name [characteristic ...]

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

-8

这就是如何创建

CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT *  FROM products;
END //

这是如何修改的

Alter PROCEDURE GetAllProducts()
BEGIN
SELECT *  FROM products;
END //

修改MySQL存储过程的方式不正确。 - sib10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接