程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2純SQL存儲過程入門的“通道”描述

DB2純SQL存儲過程入門的“通道”描述

編輯:DB2教程

以下的文章主要向大家講述的是DB2純SQL存儲過程入門的實踐方案,其實際的操作背景是本人現在在DB2 9.1數據庫做Birt應用,需用寫DB2數據庫純SQL存儲過程,經過多層嵌套循環查詢多個表,並返回一個最終的結果集(打開的游標)。

然後再在birt中直接調用以下就獲取了結果集的紀錄,並展示在頁面中。為此,我在網上搜索了很多資料,但是沒有一個完整的可以執行的DB2存儲過程。研究好久了,終於寫出來了一個模板性的示例出來。現在拿出來,和各位網友共同分享交流。

示例說明:先創建一個臨時表,並插入數據,然後查詢臨時表,返回游標。

create procedure testPrc()

-- 返回一個紀錄

dynamic result sets 1

-- DB2純SQL存儲過程

p1: begin

-- 定義一個全局臨時表tmp_hy

  1. declare global temporary table session.tmp_hy  
  2. (  
  3. dm varchar(10),  
  4. mc varchar(10)   

with replace -- 如果存在此臨時表,則替換

not logged; -- 不在日志裡紀錄

給臨時表插入三條數據

  1. insert into session.tmp_hy values('1','1');  
  2. insert into session.tmp_hy values('1','1');  
  3. insert into session.tmp_hy values('1','1');  
  4. p2: begin  

聲明游標

  1. declare cursor1 cursor with return for  
  2. select * from session.tmp_hy;  

游標對客戶機應用程序保持打開

  1. open cursor1;  
  2. end p2;  
  3. end p1  

另:鑒於有人問到此例子怎麼執行,我是在集成開發環境裡執行的.運行存儲過程的方法很多,可以存在高級編程語言裡調用,也可以在命令行調用,也可以在sql開發工具裡調用,沒法一概而論,還有,這個游標,你要看到結果,需要逐條取出所有紀錄.這些都是其它方面的知識,你可以去別的地方補充.我這裡怎麼運行的,以及怎麼處理的,為了避免誤導讀者,我還是不說了.下面我給出我調用此存儲過程得出的結果,如下圖:

1166756483234.png

下載 (1.76 KB)

2010-7-21 16:21

總結:這個例子很簡單,但是很實用,可以作為一個DB2純SQL存儲過程的模板來用。完全操作的是臨時表,你在任何db2數據庫下都可以執行,並查看結果。為了保持例子的簡潔易懂,我沒有設置輸入輸出參數,這些參數和Oracle裡,高級變成語言中函數的參數差不多,所以就寫了這個不帶參數的。

題外話:DB2 的存儲過程和函數與Oracle的差別太大,DB2存儲過程允許返回值,還可以設定返回值的數量,而Oracle的存儲過程是不允許返回值的;DB2的函數也可以返回值,也可以返回表,而Oracle返回比較隨意。

用DB2做開發是件很痛苦的事情,原因是沒有很好的開發工具,不像Oracle有 PL/SQL這樣強大的開發工具可用,但是DB2的性能比Oracle的好,海量T級別的數據庫尤為明顯。目前我用的是Quest Central For DB2 4.3,功能很弱,連自動彈出表的列名功能都沒有!DB2自帶的開發中心更爛,沒法用,shit!嚴重與IBM的品牌不相符合。不知道各位網友你們都在用什麼開發工具呢?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved