Mysql 在更新时删除存储过程

问题描述 投票:0回答:1

前段时间我创建了一个简单的存储过程:

CREATE DEFINER=`someuser`@`%` PROCEDURE `sp_foundRows`()
    READS SQL DATA
    SQL SECURITY INVOKER
BEGIN
    SELECT FOUND_ROWS() AS count;
END

工作正常。但是当我尝试更新它时 Mysql Workbench 给了我代码:

USE `mydb`;
DROP procedure IF EXISTS `sp_foundRows`;

USE `mydb`;
DROP procedure IF EXISTS `mydb`.`sp_foundRows`;
;

DELIMITER $$
USE `mydb`$$
CREATE DEFINER=`someuser`@`%` PROCEDURE `sp_foundRows`()
    READS SQL DATA
    SQL SECURITY INVOKER
BEGIN
    SELECT FOUND_ROWS() AS count;
END
-- Just a comment to procedure$$

DELIMITER ;
;

和错误消息:

Error getting DDL for object PROCEDURE sp_foundRows does not exist.

之后 sp_foundRows 从数据库中消失。我可以重新创建它,但无法更新创建的。可能有什么问题?

mysql stored-procedures mysql-workbench
1个回答
0
投票

我猜错误的发生有两个主要原因:

  • 错误提示找不到过程,可能是因为

    DEFINER
    不匹配或权限

  • 双重

    drop
    陈述会造成混乱

尝试使用以下分辨率:

  1. 检查您的程序是否存在:
SHOW PROCEDURE STATUS WHERE Db = 'mydb';
  1. 如果存在则删除它(我们将重新创建它):
DROP PROCEDURE IF EXISTS `sp_foundRows`;
  1. 重新创建过程:
DELIMITER $$

CREATE DEFINER=`current_user`@`%` PROCEDURE `sp_foundRows`()
    READS SQL DATA
    SQL SECURITY INVOKER
BEGIN
    SELECT FOUND_ROWS() AS count;
END$$

DELIMITER ;

请注意,

DEFINER
具有必要的权限。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.