自己整理的學習資料——DB2 V8資料庫基礎(十三)
2.7 儲存過程procedure
l 在aix環境中需要IBM VASUALAGE C++5.0編譯器(8.1版之前需要單獨安裝)
Connect to sample
Create procedure
Drop procedure
l 從7.1版本後儲存過程可以用SQL語句來建立。
l 執行儲存過程
DB2CALL
l 儲存過程中SQLCODE、SQLSTATE的使用:
n DECLARE SQLSTATE CHAR(5)
n DECLARE SQLCODE INT
n SQLCODE =100 沒有發現資料
=0 成功
>0 成功但有警告
<0 不成功
n SQLSTATE
Success: SQLSTATE '00000'
Not found: SQLSTATE '02000'
Warning: SQLSTATE '01XXX'
Exception: Everything else
Specific conditions:
SQLSTATE 01004: 字串值在指定給具有較短長度的另一字串
資料型別時被截斷。
Can assign names to condition:
DECLARE trunc CONDITION FOR SQLSTATE '01004'
l 舉例說明儲存過程,如下所示:
CREATE PROCEDURE YHS.HYDKZG ( )
------------------------------------------------------------------------
-- SQL 儲存過程
------------------------------------------------------------------------
-- 宣告變數
--at_end表示遊標是否到尾部標誌 , rowcount表示更新的行數
DECLARE at_end INT DEFAULT 0 ;
DECLARE rowcount INT DEFAULT 0 ;
--中間源表各個列對應的變數
DECLARE S_HYZGID BIGINT;
DECLARE S_NSRSH VARCHAR(25);
DECLARE S_NSRMC VARCHAR(100);
DECLARE S_SHWDJZH VARCHAR(50);
DECLARE S_CZYID VARCHAR(10);
DECLARE S_FJID VARCHAR(30);
DECLARE S_NSRFJID VARCHAR(30);
DECLARE S_SQRQ TIMESTAMP;
DECLARE S_DQZT CHARACTER(1);
-- 增量標誌,I代表增加、U代表更新、D代表刪除
DECLARE S_OPERATION CHARACTER(1);
--宣告遊標
-- 本例以(3707 濰坊市地稅局 G0 )為例 ,中間源表為yhs.tgtfp_hydkzg ,中間目的表為YHS.FPGL_HYDKZG
--實際部署的時候中間目的表模式名要改成各個地市字首 ,根據效能的不同,FETCH的行數可以根據實際需要調整,建議不要超過10000
SELECT HYZGID,case when NSRSH like 'g0%' then insert(NSRSH,1,2,'') else NSRSH end ,
NSRMC,SHWDJZH,CZYID,FJID,NSRFJID,SQRQ,DQZT,IBMSNAP_OPERATION
FROM yhs.tgtfp_hydkzg
WHERE NSRFJID LIKE '3707%'
ORDER BY IBMSNAP_LOGMARKER FETCH FIRST 100 ROWS ONLY ;
-- 當遊標到結尾的時候給變數 at_end 賦值為 1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET at_end = 1;
-- 客戶機應用程式的遊標保持開啟
OPEN cursor1;
select_Loop:
FETCH FROM cursor1 INTO S_HYZGID,S_NSRSH,S_NSRMC,S_SHWDJZH,S_CZYID,
S_FJID,S_NSRFJID,S_SQRQ,S_DQZT,S_OPERATION ;
--當遊標到達尾部的時候退出迴圈
IF (at_end=1) THEN
LEAVE select_Loop;
--主鍵列不能為空
IF (S_HYZGID IS NULL )THEN
SIGNAL SQLSTATE '98000'
SET MESSAGE_TEXT='THE PRIMARY KEY IS NOT PERMIT NULL :HYZGID' ;
--對錶進行轉換,當增量標誌為'I'的時候,只對目標表進行插入 ;當增量標誌為‘D’的時候,對目標表相應行進行刪除操作;當增量標誌為‘U’的時候,先執行刪除再執行插入
IF (S_OPERATION='I' ) THEN
insert into YHS.FPGL_HYDKZG(HYZGID,NSRSH,NSRMC,SHWDJZH,
values(S_HYZGID,S_NSRSH,S_NSRMC,S_SHWDJZH,S_CZYID,S_FJID,S_NSRFJID,S_SQRQ,
ELSEIF (S_OPERATION='D' ) THEN
delete from YHS.FPGL_HYDKZG where HYZGID =S_HYZGID;
ELSEIF (S_OPERATION='U' ) THEN
delete from YHS.FPGL_HYDKZG where HYZGID =S_HYZGID;
insert into YHS.FPGL_HYDKZG(HYZGID,NSRSH,NSRMC,SHWDJZH,
values(S_HYZGID,S_NSRSH,S_NSRMC,S_SHWDJZH,S_CZYID,S_FJID,S_NSRFJID,S_SQRQ,
--刪除中間源表的相應行
delete from yhs.tgtfp_hydkzg where HYZGID =S_HYZGID;
--操作行數加1
SET rowcount=rowcount+1;
END LOOP ;
CLOSE cursor1;
RETURN rowcount;
本節未完,因為系統格式原因,下篇繼續
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9524210/viewspace-462716/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自己整理的學習資料——DB2 V8資料庫基礎(六)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(八)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十二)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十六)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十八)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(十九)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(四)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(五)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十一)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十二)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十四)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十六)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十七)DB2資料庫
- 自己整理的學習資料——DB2 V8資料庫基礎(二十八)DB2資料庫
- mysql資料庫學習基礎知識整理MySql資料庫
- 資料庫基礎知識整理與複習總結資料庫
- 【java基礎資料整理】Java
- 零基礎學習MySQL資料庫—3MySql資料庫
- 學習資料庫的基礎知識的書籍資料庫
- 突擊學習之資料庫基礎彙總資料庫
- 資料庫學習筆記 - MySQL基礎知識資料庫筆記MySql
- MySQL資料庫基礎學習筆記(整理自蘇勇老師的MySQL基礎課程視訊)MySql資料庫筆記
- Go 學習資料整理Go
- iOS 學習資料整理iOS
- swift學習資料整理Swift
- 資料庫 基礎資料庫
- 資料庫基礎資料庫
- 資料庫資料整理資料庫
- 語料庫基礎學習
- 整理最全的“大資料”學習資源大資料
- 大資料學習方法,學大資料需要的基礎和路線大資料
- SLAM(一)----學習資料整理SLAM
- STF,docker學習資料整理Docker