2013-05-29 68 views
2

我希望对此问题有所帮助。 我正在运行一个使用MySQL数据库的网站。我在MySQL Workbench中构建了数据库模型,并且所有SQL查询都是存储过程。 问题是,当我对数据库进行结构更改时,我不知道哪些存储过程受到影响,因此我要么手动列出所有过程并手动进行更改,要么使用try-and-error方法。 这个问题 - 有没有一种方法来自动化存储过程更新过程。我想知道在对数据库进行特定结构更改时存储过程会受到什么影响。 如果MySQL无法实现,那么是否可以与其他数据库一起使用? (开源或商业)。 谢谢。在对数据库进行结构更改后更新MySQL存储过程

回答

0

除非实际运行该过程(这会导致错误),否则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数据库中进行任何更改。

+0

谢谢你为我工作。 –

+0

不客气。祝你的程序顺利。 – GregD

2

在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提供类似的功能。

+0

感谢这个宝贵的建议下

更多信息。也许有一天我决定从MySQL迁移。 –

相关问题