2013-05-29 101 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遷移。 –

相關問題