亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > DB2 > 正文

DB2存儲過程開發(fā)最佳實踐

2024-09-06 23:57:55
字體:
來源:轉載
供稿:網友

本文以 DB2 開發(fā)人員的角度介紹了在 DB2 存儲過程開發(fā)中需要注意的事項和技巧。新手如果能夠按照本文介紹的最佳實踐來開發(fā)存儲過程,可以避免一些常見的錯誤,從而編寫出高效的程序。本文從初始化參數、游標、異常處理、臨時表的使用以及如何尋找并 rebind 非法存儲過程等常見問題進行了著重討論,并且給出了示例代碼。

DB2 提供的強大功能可以讓開發(fā)人員創(chuàng)建出非常高效穩(wěn)定的存儲過程。但對于初學者來說,開發(fā)出這樣的程序并不容易。本文主要討論開發(fā)高效穩(wěn)定的 DB2 存儲過程的一些常用技巧和方法。

讀者定位為具有一定開發(fā)經驗的 DB2 開發(fā)經驗的開發(fā)人員。

讀者可以從本文學習到如何編寫穩(wěn)定、高效的存儲過程。并可以直接使用文章中提供的 DB2 代碼,從而節(jié)省他們的開發(fā)和調試時間,提高效率。

本文以 DB2 開發(fā)人員的角度介紹了在 DB2 存儲過程開發(fā)中需要注意的事項和技巧。新手如果能夠按照本文介紹的最佳實踐來開發(fā)存儲過程,可以避免一些常見的錯誤,從而編寫出高效的程序。本文從初始化參數、游標、異常處理、臨時表的使用以及如何尋找并 rebind 非法存儲過程等常見問題進行了著重討論,并且給出了示例代碼。

在存儲過程中,開發(fā)人員能夠聲明和設置 SQL 變量、實現流程控制、處理異常、能夠對數據進行插入、更新或者刪除。同時,客戶應用(這里指調用存儲過程的應用程序,它可以是 JDBC 的調用,也可以是 ODBC 和 CLI 等)和存儲過程之間可以傳遞參數,并且從存儲過程中返回結果集。其中,使用 SQL 編寫的 DB2 存儲過程是在開發(fā)中常見的一種存儲過程。本文主要討論此類存儲過程。

最佳實踐 1:在創(chuàng)建存儲過程語句中提供必要的參數

創(chuàng)建存儲過程語句(CREATE PROCEDURE)可以包含很多參數,雖然從語法角度講它們不是必須的,但是在創(chuàng)建存儲過程時提供它們可以提高執(zhí)行效率。下面是一些常用的參數

容許 SQL (allowed-SQL)

容許 SQL (allowed-SQL)子句的值指定了存儲過程是否會使用 SQL 語句,如果使用,其類型如何。它的可能值如下所示:

NO SQL: 表示存儲過程不能夠執(zhí)行任何 SQL 語句。

CONTAINS SQL: 表示存儲過程可以執(zhí)行 SQL 語句,但不會讀取 SQL 數據,也不會修改 SQL 數據。

READS SQL DATA: 表示在存儲過程中包含不會修改 SQL 數據的 SQL 語句。也就是說該儲存過程只從數據庫中讀取數據。

MODIFIES SQL DATA: 表示存儲過程可以執(zhí)行任何 SQL 語句。即可以對數據庫中的數據進行增加、刪除和修改。

如果沒有明確聲明 allowed-SQL,其默認值是 MODIFIES SQL DATA。不同類型的存儲過程執(zhí)行的效率是不同的,其中 NO SQL 效率最好,MODIFIES SQL DATA 最差。如果存儲過程只是讀取數據,但是因為沒有聲明 allowed-SQL 使其被當作對數據進行修改的存儲過程來執(zhí)行,這顯然會降低程序的執(zhí)行效率。因此創(chuàng)建存儲過程時,應當明確聲明其 allowed-SQL。

返回結果集個數(DYNAMIC RESULT SETS n)

存儲過程能夠返回 0 個或者多個結果集。為了從存儲過程中返回結果集,需要執(zhí)行如下步驟:

在 CREATE PROCEDURE 語句的 DYNAMIC RESULT SETS 子句中聲明存儲過程將要返回的結果集的數量(number-of-result-sets)。如果這里聲明的返回結果集的數量小于存儲過程中實際返回的結果集數量,在執(zhí)行該存儲過程的時候,DB2 會返回一個警告。

使用 WITH RETURN 子句,在存儲過程體中聲明游標。

為結果集打開游標。當存儲過程返回的時候,保持游標打開。

在創(chuàng)建存儲過程時指定返回結果集的個數可以幫助程序員驗證存儲過程是否返回了所期待數量的結果集,提高了程序的完整性。

最佳實踐 2:對輸入參數進行必要的的檢查和預處理

無論使用哪種編程語言,對輸入參數的判斷都是必須的。正確的參數驗證是保證程序良好運行的前提。同樣的,在 DB2 中對輸入參數的驗證和處理也是很重要的。正確的驗證和預處理操作包括:

如果輸入參數錯誤,存儲過程應返回一個明確的值告訴客戶應用,然后客戶應用可以根據返回的值進行處理,或者向存儲過程提交新的參數,或者去調用其他的程序。

根據業(yè)務邏輯,對輸入參數作一定的預處理,如大小寫的轉換,NULL 與空字符串或 0 的轉換等。

在 DB2 儲存過程開發(fā)中,如需要遇到對空(NULL)進行初始化,我們可以使用 COALESCE 函數。COALESCE函數返回第一個非空的參數,語法如下:

清單1:COALESCE 函數

---------------. (1) V |>>-COALESCE-------(--expression----,--expression-+--)----------><

COALESCE函數會依次檢查輸入的參數,返回第一個不是NULL的參數,只有當傳入COALESCE函數的所有的參數都是NULL的時候,函數才會返回NULL。例如, COALESCE(piName,''),如果變量piName為NULL,那么函數會返回'',否則就會返回piName本身的值。

下面的例子展示了如何對參數進行檢查何初始化。

Person表用來存儲個人的基本信息,其定義如下:

表1: Person
表1: Person

下面是用于向表Person插入數據的存儲過程的參數預處理部分代碼:

SET poGenStatus = 0; SET piName = RTRIM(COALESCE(piName, '')); SET piRank = COALESCE(piRank, 0); -- make sure all required input parameters are not null IF ( piNum IS NULL OR piName = '' OR piAge IS NULL ) THEN SET poGenStatus = 34100; RETURN poGenStatus; END IF;

表Person中num、name和age都是非空字段。對于name字段,多個空ge我們也認為是空值,所以在進行判斷前我們調用RTRIM和COALESCE對其進行處理,然后使用 piName = '',對其進行非空判斷;對于Rank字段,我們希望如果用戶輸入的NULL,我們把它設置成"0",對其我們也使用COALESCE進行初始化;對于"Age"和"Num" 我們直接使用 IS NULL進行非空判斷就可以了。

如果輸入參數沒有通過非空判斷,我們就對輸出參數poGenStatus設置一個確定的值(例子中為 34100)告知調用者:輸入參數錯誤。

下面是對參數初始化規(guī)則的一個總結,供大家參考:

1. 輸入參數為字符類型,且允許為空的,可以使用COALESCE(inputParameter,'')把NULL轉換成'';

2. 輸入類型為整型,且允許為空的,可以使用COALESCE(inputParameter,0),把空轉換成0;

3. 輸入參數為字符類型,且是非空非空ge的,可以使用COALESCE(inputParameter,'')把NULL轉換成'',然后判斷函數返回值是否為'';

4. 輸入類型為整型,且是非空的,不需要使用COALESCE函數,直接使用IS NULL進行非空判斷。

最佳實踐 3:正確設定游標的返回類型

前面我們已經討論了如何聲明存儲過程的返回結果集。這里我們討論一下結果集返回類型的問題。結果集的返回類型有兩種:調用者(CALLER) 和客戶應用(CLIENT)。首先我們看一下聲明這兩種游標的例子:

CREATE PROCEDURE getPeople(IN piAge INTEGER)DYNAMIC RESULT SETS 2READS SQL DATALANGUAGE SQLBEGIN DECLARE rs1 CURSOR WITH RETURN TO CLIENT FOR SELECT name, age FROM person WHERE agepiAge; OPEN rs1; OPEN rs2;END

代碼中rs1游標的DECLAER語句中包含WITH RETURN TO CLIENT子句,表示結果集返回給客戶應用(CLIENT)。rs2游標的DECLARE語句中包含WITH RETURN TO CALLER子句,表示結果集返回給調用者(CALLER)。

游標返回給調用者(CALLER)表示由存儲過程的調用者接收結果集,而不考慮調用者是否是另一個存儲過程,還是客戶應用。圖(1)中存儲過程PROZ如果聲明為WITH RETURN TO CALLER,那么結果ji hui返回給存儲過程PROY,Client Application是不會得到PROZ返回的結果集的。

圖1:存儲過程遞歸調用
存儲過程遞歸調用

游標返回給客戶應用(CLIENT)表示由發(fā)出最初 CALL 語句的客戶應用接收結果集,即使結果集由嵌套層次中的 15 層深的嵌套存儲過程發(fā)出也是如此。圖1中存儲過程 PROZ 如果聲明為 WITH RETURN TO CLIENT,那么結果ji hui返回給 Client Application。返回給客戶應用(CLIENT)的游標聲明是我們經常使用的,也是默認的結果集類型。

在聲明返回類型時,我們要認真考慮一下,我們需要把結果集返回給誰,以免丟失返回集,導致程序錯誤。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
538国产精品视频一区二区| 久久av高潮av| 欧美日韩在线另类| 伊人av综合网| 黄色大片免费观看| 免费网站在线观看黄| 国产毛片一区二区| 亚洲成年人专区| 国产日韩精品久久久| av老司机免费在线| 亚洲精品白浆高清久久久久久| 国产精品欧美激情在线观看| 亚洲影院一区二区三区| 亚洲免费观看在线| 亚洲成人久久影院| 看国产成人h片视频| 婷婷亚洲久悠悠色悠在线播放| 国产精品久久999| av有码在线观看| 亚洲天堂免费视频| 亚洲午夜一二三区视频| 国产成人精品免费视| 国产国产精品| 亚洲精品18在线观看| 欧洲精品二区| 欧洲不卡av| 久久成人免费网站| 99久久精品费精品国产风间由美| 69精品人人人人| 婷婷开心久久网| 色琪琪免费视频网站| 老司机2019福利精品视频导航| 国产黄色麻豆视频| 9色porny自拍视频一区二区| 国产一区激情在线| 亚洲高清视频中文字幕| 色欲综合视频天天天| 精品久久久三级丝袜| 免费福利电影| 精品无码人妻一区二区三区| 日韩欧美午夜| 国产一卡2卡3卡4卡网站免费| 国产va免费精品观看精品| 久久久婷婷一区二区三区不卡| 色综合伊人色综合网站| 午夜精品福利在线视频| 97人妻人人澡人人爽人人精品| 国产精品腿扒开做爽爽爽挤奶网站| 三级久久三级久久| 亚洲影视资源| 大陆极品少妇内射aaaaaa| 99久久精品免费| 欧美第一页浮力影院| 在线能看的av| 毛片aaaaaa| 天天插天天狠天天透| 欧美视频在线观看网站| 亚州欧美一区三区三区在线| 日本视频在线观看| 中文字幕一区二区三区电影| 久久全球大尺度高清视频| 亚洲人成在线一二| 国产精品1luya在线播放| a级片在线视频| 一区二区免费播放| 亚洲欧美日韩精品综合在线观看| 亚洲精品一区二区三区香蕉| 国产一起色一起爱| 蜜桃久久影院| 午夜精品视频一区| 成人午夜在线视频| 免费一级欧美在线观看视频| 亚洲免费伊人电影| 天天操狠狠操夜夜操| 日本精品在线播放| 欧美日韩电影一区| 国产哺乳奶水91在线播放| 一区二区三区四区视频精品免费| 日本不卡高字幕在线2019| 午夜精品久久久久久久无码| 日韩暖暖在线视频| 免费黄色福利视频| 日韩中文在线播放| 懂色av一区二区三区在线播放| 在线亚洲国产精品网站| 国产伦精品一区二区三区免.费| 日韩欧美在线电影| 国产精品毛片一区二区在线看舒淇| 川上优的av在线一区二区| 免费看污黄网站| 羞羞在线观看视频| 波多野结衣一区二区三区| 黄色国产在线| 国产清纯美女被跳蛋高潮一区二区久久w| 国产在线观看www| 三级在线观看视频| 一本色道久久综合狠狠躁篇的优点| 亚洲午夜一区| 在线欧美日韩国产| 日韩精品亚洲aⅴ在线影院| 日本边添边摸边做边爱的第三级| 欧美交a欧美精品喷水| 日韩黄色三级在线观看| 欧美在线亚洲| 成年人免费网站| 欧美一级黄色大片| 免费久久99精品国产| 99视频在线观看免费| 亚洲高清影视| 国产综合精品久久久久成人av| 狠狠色噜噜狠狠狠8888米奇| 天堂中文视频在线| 国产精品久久久久天堂| 亚洲激情在线看| 老司机精品视频在线| 欧美a在线观看| 国产一区二区三区不卡在线| 在线观看污污视频| 欧美日韩国产999| 99精品国产一区二区青青牛奶| 国产精品人人爱一区二区白浆| 国产又粗又长又爽视频| 久久免费99精品久久久久久| 麻豆国产精品va在线观看不卡| 欧洲一区二区av| av污在线观看| 奶水喷射视频一区| 国产精品黄色网| 亚洲天堂av在线播放| 三级av在线免费观看| 老鸭窝一区二区久久精品| 久久一本综合| 日韩成人三级视频| www激情久久| 亚洲欧美日韩中文在线| 9191在线视频| 欧美成人亚洲高清在线观看| 日本不卡在线播放| 扒开伸进免费视频| 九九久久国产精品| 国产精品实拍| 欧美影院精品一区| 欧美精品羞羞答答| 欧美激情综合| 少妇人妻无码专区视频| 福利社在线免费视频| 久久久久久久穴| 国内外免费激情视频| 国产精品久久久久久免费播放| 成人短视频app| 欧美成免费一区二区视频| 欧美高清视频在线高清观看mv色露露十八| 久久久无码一区二区三区| 精品色999| 成人免费无遮挡无码黄漫视频| 7878成人国产在线观看| 欧美精品福利视频| 欧美日韩精品一区二区三区| 欧美日韩不卡合集视频| 国产一区二区不卡| 国产精品久久久精品| 欧美日韩www| 中文字幕一区二区在线播放| 一区二区三区日韩视频| 中文亚洲av片在线观看| 日韩中文字幕视频在线| 激情图片中文字幕| www.av网站| 国产麻豆免费观看| 午夜小视频在线观看| 丰满少妇久久久久久久| 在线综合+亚洲+欧美中文字幕| 欧美美最猛性xxxxxx| 亚洲综合久久av一区二区三区| 在线亚洲高清视频| 日本在线天堂| 91精品国产综合久久久久久蜜臀| 91精品国产高久久久久久五月天| chinese少妇国语对白| 亚洲国产高清不卡| 亚洲九九精品| 精选一区二区三区四区五区| 91麻豆精品国产91久久久| 亚洲精品中文在线| 欧美狂野激情性xxxx在线观| 亚洲一区二区av电影| 在线日本高清免费不卡| 国产精品视频九色porn| 欧美精品video| 18岁网站在线观看| 中文字幕亚洲欧美| 亚洲aⅴ优女av综合久久久| 欧美影视一区二区| 国产在线不卡一卡二卡三卡四卡| 国产激情一区二区三区桃花岛亚洲| 精品中文字幕在线播放| 日本猛少妇色xxxxx免费网站| segui88久久综合| 国产精品一区一区| 日韩成人在线一区| 老司机午夜精品| sm捆绑调教国产免费网站在线观看| 午夜影院免费观看视频| 久久婷婷色综合| 国产1区2区3区4区| 视频在线观看你懂的| 都市激情久久综合| 中文一区二区在线观看| 欧美成人久久久免费播放| 精品亚洲国产成人av制服丝袜| 黄色网址电影| 欧美婷婷六月丁香综合色| 国产亚洲欧美精品久久久久久| 日韩电影天堂视频一区二区| 国产又黄又粗又猛又爽的| 男人天堂网视频| 欧美日韩国产精品一区二区三区四区| 佐山爱痴汉视频一区二区三区| 少妇熟女视频一区二区三区| 欧美在线视频一区二区| 国产一区二区精彩视频| 91视频免费在观看| 欧美二区三区91| 久久久久久久人妻无码中文字幕爆| 国产在线观看免费视频软件| 久草视频在线资源站| 免费极品av一视觉盛宴| 久久99精品国产麻豆婷婷洗澡| 91免费观看国产| 精品国产网站在线观看| 日韩一区二区三区三四区视频在线观看| 国产一级黄色| 一本大道久久加勒比香蕉| 日日摸夜夜爽人人添| 久久久久久久久久97| 国产精品大片免费观看| 国产精品私房写真福利视频| 中文在线不卡| 婷婷六月国产精品久久不卡| 国产精品白嫩白嫩大学美女| 久久黄色片网站| 精品视频麻豆入口| 国产欧美日韩一区二区三区四区| 国产无遮挡在线视频免费观看| 国产精品成人久久久久| 国产中文av在线| 高清国产在线一区| 一级黄色在线观看| 久久免费视频66| 日本免费高清一区二区| 无码免费一区二区三区| 亚洲欧美久久久久| 欧美寡妇偷汉性猛交| 国产亚洲欧美日韩一区二区| www.久久色| 欧美gay1069大粗吊| 国产又黄又爽视频| 嫩草影院永久一二三入口| 亚洲人成网站色ww在线| 伊人网在线观看| 中文字幕资源在线观看| 欧美一区二区三区视频| 四川一级毛毛片| 超碰在线播放97| 国产亚洲一区二区在线观看| 91桃色在线| 国产精品高清在线观看| 国产精品一区而去| 国产日韩精品推荐| 免费试看一区| 亚洲va电影大全| 无套白嫩进入乌克兰美女| 精品久久久三级丝袜| 蜜臀av在线观看| 一区二区高清视频| 亚洲小视频在线播放| 日韩成人在线视频网站| 在线观看91精品国产入口| 欧洲在线免费视频| 五月激情四射婷婷| 国产中文字幕一区二区| 精品一区二区三区五区六区七区| 久久精品免视着国产成人| 欧美久久久久久久久久久久久久| 香蕉人妻av久久久久天天| 91一区一区三区| av小说在线观看| 在线观看国产精品入口| 美女久久久久久久久久| 美女日批免费视频| 精品卡一卡卡2卡3网站| 亚洲一级片免费观看| 日韩午夜电影在线观看| xfplay资源站色先锋在线观看| 麻豆视频免费在线播放| 国产成人激情av| 国产不卡在线观看| 久久久久无码国产精品| 欧美中文字幕在线观看视频| 欧美精品www在线观看| 欧美做受高潮中文字幕| 免费观看一级特黄欧美大片| 最近中文字幕2019第二页视频| 中文字幕第一页av| 国内免费精品永久在线视频| 国产精品观看| 欧美人与性动交α欧美精品图片| 国产精品久久成人免费观看| 一区二区三区激情视频| xxx欧美xxx| 欧美大片日本大片免费观看| 一级片在线免费看| 日韩欧美天堂| 在线视频一区二区三区在线播放| 国产精品视频一区二区三区,| 人妻互换免费中文字幕| 美女av在线播放| 成人免费观看毛片| 精品日产卡一卡二卡麻豆| 91精品国产福利尤物| 亚洲国产综合视频在线观看| 懂色av粉嫩av蜜臀av一区二区三区| 精品欧美aⅴ在线网站| 4虎在线播放1区| 亚洲电影在线观看| 欧美福利第一页| xxxx日本少妇| 午夜免费久久看|