Stored-Procedures

DB2,如何將所有儲存過程保存為文件

  • July 11, 2021

如何從 DB2 模式中提取所有儲存過程作為單獨的文件(不使用 Data Studio,因此可以編寫腳本)。我需要它們,所以我可以上傳到原始碼管理。如果一個人可以訪問伺服器但沒有伺服器訪問權限,我已經找到了一種通過命令行執行此操作的方法。

您可以使用db2look帶有該選項的 clp 命令-e,儘管它沒有僅導出過程的選項,因此除非它們位於沒有其他對象的模式中,否則您還將在輸出中混合獲得例如 TABLE、VIEW 和其他 DDL。

$ db2look -d BP -e -cor -nofed -z PAUL | grep -A 999 'DDL Statements for Stored Procedures'
-- DDL Statements for Stored Procedures
---------------------------------


SET SYSIBM.NLS_STRING_UNITS = 'SYSTEM';
SET CURRENT SCHEMA = "PAUL    ";
SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","PAUL";

CREATE OR REPLACE PROCEDURE P ()
BEGIN
         RETURN   /* this */   2  ; -- comment
   /* this is a 
   comment */
END
;


-------------------------------
-- DDL Statements for Triggers
-------------------------------

SET SYSIBM.NLS_STRING_UNITS = 'SYSTEM';
...




   

從中導出 TEXT 列SYSCAT.PROCEDURES是另一種方法。

由於該列是 CLOB,您可能希望使用允許導出超過 32K 的值的 clp 功能

--
-- Simple method to overcome the 32K column limit on CLP output
--
--   The example below will export the TEXT columns of the SYSCAT.VIEWS for a single row into a text file in the current directory called syscat.views.txt.001
--
-- This capability of the clp is documented here https://docs-db2.mybluemix.net/docs/content/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0002135.html
--
-- run from the Db2 CLP as follows
---
-- db2 +c -td@ -f export_clobs.db2

DECLARE C0 CURSOR FOR SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = 'SYSCAT' AND VIEWNAME = 'TABLES' WITH UR
@
OPEN C0
@
FETCH FROM C0 LOB COLUMN ALL INTO syscat.tables.txt OVERWRITE
@
CLOSE C0
@
COMMIT
@

順便說一句,如果創建每個 SP 時這些不是預設值,您可能還想導出 CURRENT PATH、CURRENT SCHEMA 和 NLS_STRING_UNITS。

引用自:https://dba.stackexchange.com/questions/283243