前段时间我创建了一个简单的存储过程:
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 从数据库中消失。我可以重新创建它,但无法更新创建的。可能有什么问题?
我猜错误的发生有两个主要原因:
错误提示找不到过程,可能是因为
DEFINER
不匹配或权限
双重
drop
陈述会造成混乱
尝试使用以下分辨率:
SHOW PROCEDURE STATUS WHERE Db = 'mydb';
DROP PROCEDURE IF EXISTS `sp_foundRows`;
DELIMITER $$
CREATE DEFINER=`current_user`@`%` PROCEDURE `sp_foundRows`()
READS SQL DATA
SQL SECURITY INVOKER
BEGIN
SELECT FOUND_ROWS() AS count;
END$$
DELIMITER ;
请注意,
DEFINER
具有必要的权限。
希望这有帮助!