2015-11-13 34 views
1

基本上我有更新我們的整個系統停止使用某個表的不愉快的立場,而是使用另一個表。我已經完成了我們所有的代碼,現在我需要爲我們的所有函數和過程執行此操作。MySQL:有沒有辦法返回代碼中找到的字符串過濾的函數/過程列表?

我知道我可以這樣在數據庫中得到的功能/程序的列表:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 

我也知道,我可以看看代碼的單個功能/程序這樣:

SHOW CREATE FUNCTION function_name 
SHOW CREATE PROCEDURE procedure_name 

但是,我不想逐個查看每個函數和過程,因爲我們有超過200個函數和過程。

我想知道是否有類似的東西...

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE code_column_name LIKE '%search_string%' 

似乎有不被在包含代碼INFORMATION_SCHEMA.ROUTINES任何列,但是......是有辦法也許在不同的桌子上做這個?

回答

0

嘗試:

SELECT * FROM mysql.proc WHERE body LIKE '%search_string%' 
+0

嗯,這似乎並沒有得到所有的人。 SELECT * FROM mysql.proc WHERE body LIKE'%search_string%'返回更多,所以也許這會工作?我不確定它是否能夠獲得所有這些,但是不確定body和body_utf8之間的區別是什麼? –

+0

在body和body_utf8上做「或」可以獲得與僅僅身體相同數量的結果。我在想可能是身體呢? –

+0

你的默認字符集是什麼? SELECT count(*),sum(body = body_utf8)FROM mysql.proc'的輸出是什麼? –

0

我會用UNIX的grep爲。

如果將show create function/procedure的結果輸出到磁盤上的平面文件,然後在其上運行grep。或者直接通過grep來打開它。

下面是做到這一點的一種方法:

echo 'show create function foo' | mysql -h*host* -u*user* -p*pass* *schema* | grep *obsolete-tablename* 

或轉儲整個數據庫到磁盤,然後用grep顯示它。

mysqldump -h*host* -u*user* -p*pass* *schema --routines > mydump.sql 
grep *obsolete-tablename mydump.sql