DB2存儲過程如果要全部導出的話,是否可行呢?答案是肯定的,下面就為您介紹四種導出所有DB2存儲過程的方法,希望對您學習DB2存儲過程方面能有所幫助。
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 ; "
推薦這個。