我希望您能帮我解决这个问题。我运行一个使用MySQL数据库的网站。我在MySQL Workbench中建立了数据库模型,所有的SQL查询都是存储过程。
问题在于,当我对数据库进行结构性更改时,我不知道哪些存储过程会受到影响,所以我要么手动列出所有的存储过程并手动进行更改,要么使用尝试和错误的方法。
问题是 - 有没有一种自动化存储过程更新过程的方法。我想知道在对数据库进行某些结构性更改时,哪些存储过程会受到影响。
如果MySQL无法实现,那么其他数据库是否可以实现?(开源或商业)
谢谢。
在Oracle中,如果任何依赖对象被更改或变得无效,则存储过程会变为无效。这些依赖对象包括其他被引用的存储过程、表、包等。
要查找当前所有无效对象的计数,可以执行以下操作:
SELECT object_type, count(*)
FROM user_objects
WHERE status = 'INVALID'
GROUP BY object_type
DBA可以简单地运行脚本($ORACLE_HOME/rdbms/admin/utlrp.sql
)来编译所有无效对象(视图、存储过程、包、函数、触发器等)。像Toad这样的Oracle第三方工具通过GUI提供类似的功能。
在进行更改之前,MySQL不会向您返回有关受影响过程的信息,直到您实际运行该过程(这将导致错误)。INFORMATION_SCHEMA
具有一个名为ROUTINES
的表,其中MySQL提供有关存储过程(包括过程和函数)的信息:
USE INFORMATION_SCHEMA;
DESCRIBE ROUTINES;
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM ROUTINES;
ROUTINE_DEFINITION
行中更改的列名,并提供需要修改的所有存储过程列表。DROP PROCEDURE
/ CREATE PROCEDURE
命令完成。您不能直接在 INFORMATION_SCHEMA
数据库中进行任何更改。