我很感激这个问题的任何帮助。 我正在运行一个使用MySQL数据库的网站。我在MySQL Workbench中构建了数据库模型,所有SQL查询都是存储过程。 问题是,当我对数据库进行结构更改时,我不知道哪些存储过程受到影响,因此我要么手动列出所有过程并手动进行更改,要么使用try-and-error方法。 问题是 - 有没有办法自动化存储过程更新过程。我想确切地知道在对数据库进行某些结构更改时会影响哪些存储过程。 如果MySQL不可能,那么它可以与其他数据库一起使用吗? (开源或商业)。 谢谢。
答案 0 :(得分: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提供类似的功能。
答案 1 :(得分: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
数据库中进行任何更改。
更多信息: