有没有办法在不执行/调用MySQL存储过程中检查不正确的表名(或别名)?

Is there a way to check incorrect table names (or aliases) in MySQL Stored Procedures without executing/calling them?

提问人:VRA 提问时间:11/11/2023 更新时间:11/11/2023 访问量:19

问:

背景: 我必须从 MySQL 5.7 迁移到 MySQL 8。我无权访问(设置为 0)。我有 ~200 个存储过程,其中查询/DML 语句中的表名(例如)及其别名(例如)不区分大小写。lower_case_table_namesmy_table_1mt1

因此,我使用如下语句存储过程: .在 MySQL 5.7 中,这是一个有效的语句;但在 MySQL 8 中则不然。SELECT mt1.column1, MT1.column2 from my_table_1 MT1 where MT1.column3=100;

我即将开始一个项目,以使用正确的大小写更新所有存储过程。

问题

  1. 有没有简单的方法可以实现此更新?
    • 表名没有任何前缀/后缀来唯一标识它们。例如,可以是表名,而不是 .schoolt_school
    • 此外,别名是非常通用的(例如,等)sc
  2. 即使我完成了此任务,有没有办法在不执行每个过程的情况下检查更新是否正确完成?
    • 我注意到查询在独立运行时被标记为错误,但在作为存储过程的一部分进行编译时则不会。例如,如果表名在作为独立查询执行时失败,但如果它是存储过程的一部分,则该过程将成功编译(即其 DDL 已成功更新)。但是调用该过程会导致错误。my_table_1SELECT * from MY_TABLE_1
mysql 存储过程 表名

评论

0赞 Adrian Maxwell 11/11/2023
为什么要转向区分大小写?有具体原因吗?
1赞 Bill Karwin 11/11/2023
我不知道有什么方法可以自动化这一点,因为有太多的边缘情况。目视检查后再进行测试是最快和最有效的方法。
0赞 VRA 11/12/2023
@AdrianMaxwell DO 的托管 MySQL 数据库不允许更改甚至初始化该值,该值默认为 0。这需要区分大小写的表名。lower_case_table_name

答: 暂无答案