首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 存儲過程批量部署兩大高效方案:SQL 腳本與 BAT 自動化腳本

     編輯:DB2 教學

核心原則:依賴順序編譯

存儲過程間若存在呼叫關係(外層呼叫內層),編譯部署時必須先建立被呼叫的內層過程,再建立外層過程,否則會報錯「物件不存在」。

方案一:單一 SQL 腳本檔 + db2 命令批次執行

腳本結構規範

  1. 每個過程定義前先 DROP PROCEDURE IF EXISTS proc_name(或 DROP PROCEDURE proc_name 捕獲錯誤)確保冪等性。
  2. 依「內層→外層」順序排列所有 CREATE PROCEDURE 陳述式。
  3. 語句結束符統一使用 !(避免過程體內分號衝突)。

範例腳本 deploy_procs.sql

-- 1. 內層工具過程
DROP PROCEDURE IF EXISTS inner_util!
CREATE PROCEDURE inner_util(IN p1 INT)
LANGUAGE SQL
BEGIN
  -- 邏輯
END!

-- 2. 外層業務過程(呼叫 inner_util)
DROP PROCEDURE IF EXISTS outer_biz!
CREATE PROCEDURE outer_biz(IN p2 INT)
LANGUAGE SQL
BEGIN
  CALL inner_util(p2);
END!

一鍵部署命令

db2 connect to MYDB
db2 -td! -f deploy_procs.sql
db2 terminate
  • -td!:指定語句結束符為 !
  • -f:指定輸入檔案

方案二:Windows BAT 批次檔自動化(支援混合 SQL/邏輯)

適用於需穿插執行 DDL、DML、授權等混合操作的場景。

範例 deploy.bat

@echo off
set DB=MYDB
set USER=db2admin
set PWD=password

db2 connect to %DB% user %USER% using %PWD%
if errorlevel 1 goto ERR

rem 依序執行多個 SQL 檔
db2 -td! -f .\procs\01_inner_util.sql
db2 -td! -f .\procs\02_outer_biz.sql
db2 -td! -f .\procs\03_grant_perms.sql

db2 terminate
echo 部署完成
goto END

:ERR
echo 連線失敗,請檢查資料庫/帳號
:END
pause

進階技巧:從系統目錄匯出現有過程 DDL

若需備份或遷移現有過程,可用以下查詢生成 CREATE PROCEDURE 腳本:

EXPORT TO procedures.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)
FROM SYSCAT.PROCEDURES
WHERE PROCNAME LIKE 'NP_%'
ORDER BY CREATE_TIME;
  • TEXT 欄位包含完整 CREATE PROCEDURE 定義(含結束符)。
  • 匯出後可直接作為部署腳本來源。

最佳實務小結

  • 版控管理所有部署腳本(Git/SVN)。
  • 建立 pre_deploy_check.sql 驗證前置條件(Schema 存在、權限、相依物件)。
  • 生產環境部署前必在測試環境全流程驗證。
  • 保留回滾腳本(DROP PROCEDURE 列表)以備緊急回退。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved