從數據庫中導出所有的存儲過程的4種方法

1)
從 DB2 的目錄表 SYSCAT.ROUTINES 中選取:
在 SYSCAT.ROUTINES 系統目錄表中,有一個名爲 TEXT 的字段,其數據類型定義爲 CLOB,長度爲 2M(2097152 個字節),用於存放存儲過程的創建語句。爲得到全部存儲過程的定義,可使用類似如下 SELECT 語句,並將定義輸出到一個文件中。
DB2 SELECT CHAR(ROUTINESCHEMA,20), CHAR(ROUTINENAME,20), TEXT FROM SYSCAT.ROUTINES > <輸出文件名>

此方法的缺陷是當text>32767時,導出的該條存儲過程是不完整的。


2)
對於 v8.2 之後的 DB2,DB2LOOK 命令的 -e 選項中增加了對存儲過程的創建語句的提取,用戶通過執行:
db2look -d <數據庫名> -e -o <輸出文件名>
在命輸出文件中找到“存儲過程的 DDL 語句”段,從而獲得創建所有存儲過程的語句。

據說,db2 v8中 的db2look導出的存儲過程是不完整的

3)
通過 GET ROUTINE 命令來完成: 

由於 GET ROUTINE 只能在已知存儲過程名稱後,對單個存儲過程進行,因此需要分成兩個步驟來完成:
1)獲取所有存儲過程的名稱:
DB2 SELECT CHAR(ROUTINESCHEMA,20) AS SCHEMA, CHAR(ROUTINENAME,20) AS NAME FROM SYSCAT.ROUTINES WHERE SUBSTR(VARCHAR(TEXT),1,16) = 'CREATE PROCEDURE' > <輸出文件名>
2. 根據輸出文件中存儲過程的名稱,分別對每個存儲過程執行如下操作,以便將完整的創建語句輸出到指定文件中:
DB2 GET ROUTINE INTO <輸出文件名> FROM PROCEDURE <存儲過程模式名>.<存儲過程名>

這個有點繁瑣

4)

使用export:

db2 "EXPORT TO procudure.del OF del MODIFIED BY LOBSINFILE SELECT 'SET CURRENT SCHEMA '||rtrim(procschema)||'@'||chr(10)||'SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,'||rtrim(procschema)||' @'||chr(10)||text||chr(10)||'@'||chr(10) FROM syscat.procedures ORDER BY create_time ; "

我在推薦這個。

來源:http://www.cppblog.com/prayer/archive/2010/05/09/114933.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章