【问题标题】:ERROR 1146 (42S02): Table 'mysql.proc' doesn't exist while calling a stored procedure错误 1146 (42S02):调用存储过程时表 'mysql.proc' 不存在
【发布时间】:2021-12-06 19:49:42
【问题描述】:

我正在使用这个线程-

Rename a mysql procedure

重命名存储过程

在这里尝试答案中显示的命令-

UPDATE `mysql`.`proc`
SET name = '<new_proc_name>',
specific_name = '<new_proc_name>'
WHERE db = '<database>' AND
  name = '<old_proc_name>';

我得到了错误 -

ERROR 1146 (42S02): Table 'mysql.proc' doesn't exist while calling a stored procedure

这里关于mysql.proc不退出的其他问题,没有解决调用存储过程的具体问题。

【问题讨论】:

标签: mysql stored-procedures


【解决方案1】:

mysql.proc 表已在 MySQL 8.0 中删除。见No more mysql.proc in MySQL 8.0

您可以使用information_schema.routines 获取有关存储过程的信息。但这是一个只读视图,您无法对其进行更新。所以我认为不再有任何简单的方法可以重命名程序。您可以使用动态 SQL 使用此信息定义具有新名称的过程。

编辑:

不幸的是,上述内容仅在 MySQL 中是不可能的,因为 CREATE PROCEDURE 不能使用 PREPARE 执行,并且 information_schema.routines 不包含重新创建过程所需的所有信息。您可以使用外部语言执行 SHOW CREATE PROCEDURE 查询,然后替换名称以形成新查询。

【讨论】:

  • 请教我如何使用动态 SQL 定义新名称的过程
  • 我在放弃之前got this far
  • 您已经很接近了,但是您缺少动态 SQL 中的参数列表。
  • 当然,这不在 IS 视图中。并采用所有其他定义器/sql 模式参数来准确地重新创建它。 apparently“准备好的语句协议尚不支持此命令”。因此,从 mysqldump --routines 中获取 sql,编辑例程名称的 SQL 并重新导入可能不那么繁琐。我同意你的看法@PayelSenapati,这太可怕了。
【解决方案2】:

建议避免直接摆弄 any mysql 表。

使用show create procedure old_proc_name

然后create procedure new_proc_name ....

并删除旧的drop procedure old_proc_name

【讨论】:

  • 它的主要问题是重新编写整个程序,例如如果程序是第一千行,再次编写它只是更改名称将非常令人沮丧
猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2020-01-05
相关资源
最近更新 更多