[DB2]儲存過程經常使用方法
CREATE PROCEDURE SCHEMA.PD_PROCEDURE
(
IN IN_PARA VARCHAR(2048),
OUT OUT_PARA VARCHAR(1024)
)
BEGIN
DECLARE V_SQL VARCHAR(4000) DEFAULT ''; --存放動態SQL
DECLARE V_RTN_FLAG VARCHAR(1) DEFAULT '0'; --返回標識
DECLARE V_RTN_MSG VARCHAR(1024) DEFAULT ''; --返回錯誤資訊
DECLARE SQLCODE INTEGER; --SQL程式碼標識
DECLARE V_ST STATEMENT; --執行動態SQL用到的引數
DECLARE SQLEXIT CONDITION FOR SQLSTATE '80001';
--自定義異常
DECLARE EXIT HANDLER FOR SQLEXIT
BEGIN
SET OUT_PARA='RTN_FLAG=1'||CHR(13)||CHR(10)||'RTN_MSG='||V_RTN_MSG;
END;
--定義資料庫系統異常
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS EXCEPTION 1 V_RTN_MSG=MESSAGE_TEXT;
SET OUT_PARA='RTN_FLAG=1'||CHR(13)||CHR(10)||'RTN_MSG='||V_RTN_MSG;
END;
--根據判斷條件,返回不同異常
IF NOT EXISTS(SELECT 1 FROM TEST WHERE TEST='Y') THEN
SET V_RTN_MSG='請*********執行本操作!';
SIGNAL SQLEXIT;
END IF;
--返回結果集
BEGIN
DECLARE V_RTN_CUR CURSOR WITH RETURN FOR
SELECT * FROM DB2INST1.TB_TEST;
ORDER BY SETDATE FETCH FIRST 3 ROWS ONLY;
OPEN V_RTN_CUR;
END;
--生成uuid
select concat(hex(RAND()), hex(RAND())) into v_uuid from SYSIBM.SYSDUMMY1;
--生成時間戳充當uuid
select replace(replace(char(current timestamp),'-',''),'.','') from SYSIBM.dual
--執行動態SQL
BEGIN
SET V_SQL='INSERT INTO DB2INST1.TB_TEST_'||V_DATE||' SELECT * FROM DB2INST1.TB_TEST;';
PREPARE V_ST FROM V_SQL;
EXECUTE V_ST;
END;
--校驗兩張表的資料是否完全相同
IF EXISTS
(SELECT 1
FROM
(
SELECT STD_ID,BS_FLAG,STD_NUM,SJ_NO,SJ_DATE,DEAR_DATE,DEAR_NO
FROM DB2INST1.TB_HOLD_CHECK
WHERE OPEN_STATUS='B'
) T1
FULL JOIN
(
SELECT STDID,BUYORSAL,STDNUM,STDNO,STDDATE,FADATE,CNTNO
FROM DB2INST1.TB_CNTRACT
WHERE OPEN_STATE='B'
) T2
ON T1.SJ_NO=T2.STDNO AND T1.SJ_DATE=T2.STDDATE AND T1.DEAR_NO=T2.CNTNO AND T1.DEAR_DATE=T2.FADATE
WHERE COALESCE(STD_NUM,0)<>COALESCE(STDNUM,0)
) THEN
STD V_ERRMSG='校驗失敗,****************';
STD V_FLAG = '1';
--插入錯誤記錄表
INSERT INTO DB2INST1.TB_CHECK_RESULT(CLOSE_DATE,CHECK_NAME,CHECK_STEP,CHECK_RESULT,CHECK_MSG,OPR_USER,OPR_DATE)
VALUES(CURRENT_DATE,'PD_PROCEDURE','STEP*',V_FLAG,V_ERRMSG,'ADMIN',CURRENT_DATE);
END IF;
--程式無異常,返回的結果
SET OUTPARA='RTN_FLAG=0'||CHR(13)||CHR(10)||'RTN_MSG=操作成功!';
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29812844/viewspace-1988821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- db2刪除已經儲存的表儲存過程DB2儲存過程
- DB2儲存過程DB2儲存過程
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- 儲存過程儲存過程
- 求助:DB2 V7儲存過程引數限制DB2儲存過程
- MySQL儲存過程的異常處理方法MySql儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- 使用儲存過程儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- mysql儲存過程經典例項詳解MySql儲存過程
- 實戰儲存過程排程過程儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- MySQL儲存過程中捕獲異常的方法MySql儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- 把自編儲存過程設定為系統儲存過程儲存過程
- SQL Server 儲存過程的經典分頁(轉)SQLServer儲存過程
- 儲存過程編寫經驗和優化措施儲存過程優化
- 儲存過程 傳 datatable儲存過程
- 儲存過程——遊標儲存過程
- Oracle儲存過程-1Oracle儲存過程
- mysql儲存過程整理MySql儲存過程
- JAVA儲存過程(轉)Java儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- Winform呼叫儲存過程ORM儲存過程
- oracle的儲存過程Oracle儲存過程
- SER SERVER儲存過程Server儲存過程