3

我将不胜感激有关此问题的任何帮助。我正在运行一个使用 MySQL 数据库的网站。我在 MySQL Workbench 中构建了数据库模型,所有 SQL 查询都是存储过程。问题是当我对数据库进行结构更改时,我不知道哪些存储过程会受到影响,所以我要么手动列出所有过程并手动进行更改,要么使用试错法。问题 - 有没有办法自动化存储过程更新过程。我想确切地知道在对数据库进行某些结构更改时会影响哪些存储过程。如果 MySQL 不可以,那么其他数据库可以吗?(开源或商业)。谢谢你。

4

2 回答 2

3

在 Oracle 中,如果任何依赖对象被更改或变为无效,则存储过程确实会变为无效。依赖对象包括其他引用的存储过程、表、包等。

要查找当前无效的所有对象的计数,可以执行

SELECT object_type, count(*)
FROM user_objects
WHERE status = 'INVALID'
GROUP BY object_type

DBA 可以简单地运行脚本 ( $ORACLE_HOME/rdbms/admin/utlrp.sql) 来编译所有无效对象(视图、过程、包、函数、触发器等)。Oracle 的第三方工具(如 Toad)通过 GUI 提供了类似的功能。

于 2013-05-29T00:44:39.160 回答
1

在您实际运行该过程(这将导致错误)之前,MySQL 不会向您返回有关哪些过程受到任何更改影响的信息。有INFORMATION_SCHEMA一个表ROUTINES,其中 MySQL 提供有关存储例程(过程和函数)的信息:

USE INFORMATION_SCHEMA;
DESCRIBE ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM ROUTINES;

我自己还没有这样做,但我相信您可以编写一个 SQL 查询,该查询将搜索行中更改的列名,ROUTINE_DEFINITION并为您提供您需要修改的所有过程的列表。

请记住,对过程的任何更改都需要使用DROP PROCEDURE/CREATE PROCEDURE命令来完成。您不能直接在INFORMATION_SCHEMA数据库中进行任何更改。

更多信息如下:

于 2013-05-29T00:44:40.927 回答