Posted on 2010-05-09 18:30
Prayer 閱讀(1243)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
DB2
1)
從 DB2 的目錄表 SYSCAT.ROUTINES 中選取:
在 SYSCAT.ROUTINES 系統(tǒng)目錄表中,有一個(gè)名為 TEXT 的字段,其數(shù)據(jù)類型定義為 CLOB,長度為 2M(2097152 個(gè)字節(jié)),用于存放存儲(chǔ)過程的創(chuàng)建語句。為得到全部存儲(chǔ)過程的定義,可使用類似如下 SELECT 語句,并將定義輸出到一個(gè)文件中。
DB2 SELECT CHAR(ROUTINESCHEMA,20), CHAR(ROUTINENAME,20), TEXT FROM SYSCAT.ROUTINES > <輸出文件名>
此方法的缺陷是當(dāng)text>32767時(shí),導(dǎo)出的該條存儲(chǔ)過程是不完整的。
2)
對(duì)于 v8.2 之后的 DB2,DB2LOOK 命令的 -e 選項(xiàng)中增加了對(duì)存儲(chǔ)過程的創(chuàng)建語句的提取,用戶通過執(zhí)行:
db2look -d <數(shù)據(jù)庫名> -e -o <輸出文件名>
在命輸出文件中找到“存儲(chǔ)過程的 DDL 語句”段,從而獲得創(chuàng)建所有存儲(chǔ)過程的語句。
據(jù)說,db2 v8中 的db2look導(dǎo)出的存儲(chǔ)過程是不完整的
3)
通過 GET ROUTINE 命令來完成:
由于 GET ROUTINE 只能在已知存儲(chǔ)過程名稱后,對(duì)單個(gè)存儲(chǔ)過程進(jìn)行,因此需要分成兩個(gè)步驟來完成:
1)獲取所有存儲(chǔ)過程的名稱:
DB2 SELECT CHAR(ROUTINESCHEMA,20) AS SCHEMA, CHAR(ROUTINENAME,20) AS NAME FROM SYSCAT.ROUTINES WHERE SUBSTR(VARCHAR(TEXT),1,16) = 'CREATE PROCEDURE' > <輸出文件名>
2. 根據(jù)輸出文件中存儲(chǔ)過程的名稱,分別對(duì)每個(gè)存儲(chǔ)過程執(zhí)行如下操作,以便將完整的創(chuàng)建語句輸出到指定文件中:
DB2 GET ROUTINE INTO <輸出文件名> FROM PROCEDURE <存儲(chǔ)過程模式名>.<存儲(chǔ)過程名>
這個(gè)有點(diǎn)繁瑣
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 ; "
我在推薦這個(gè)。