[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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- MySQL儲存過程的異常處理方法MySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- Oracle儲存過程Oracle儲存過程
- MySQL---------儲存過程MySql儲存過程
- 造數儲存過程儲存過程
- linux呼叫儲存過程Linux儲存過程
- Oracle儲存過程-1Oracle儲存過程
- 儲存過程——遊標儲存過程
- Winform呼叫儲存過程ORM儲存過程
- 儲存過程 傳 datatable儲存過程
- mysql儲存過程整理MySql儲存過程
- JAVA儲存過程(轉)Java儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- MySQL之儲存過程MySql儲存過程
- oracle的儲存過程Oracle儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- mybatis儲存過程返回listMyBatis儲存過程
- 資料庫儲存過程資料庫儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- SQL 分頁儲存過程SQL儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- jsp中呼叫儲存過程JS儲存過程
- mongo 儲存過程詳解Go儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- [MySQL光速入門]017 儲存過程中的"異常處理"MySql儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- SQL server儲存過程函式SQLServer儲存過程函式