青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

活用SQLCA

Posted on 2008-09-10 10:42 Prayer 閱讀(254) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫,SQLC/C++DB2
----DB2應用程序使用SQL通訊區(SQLCA)將信息返回到程序中,有些信息是有用的,有些不是;有些是有意義的,有些不是。如果能它們區分開來,那么我們可以利用SQLCA信息來提高程序代碼的效率,減少DB2調用的開銷,從而簡化程序邏輯,提高性能。
SQLCODE
----SQLCA中最常使用的域是SQLCODE,許多程序員知道在每一次調用DB2以后都應該檢查SQLCODE,以確定該調用是否成功。大多數程序者會把SQLCODE是否為+0,作為成功調用的標志。同時還會檢查SQLCODE是否為+100,作為文件結束的標志(沒有記錄或沒有更多的記錄)。對于其他的SQLCODE,不管是正值或負值,程序一般都執行錯誤處理例程,結束程序或事務。但是,SQLCODE為負值并不一定表示錯誤非常嚴重,以至于要結束程序。并且,某些SQLCODE為正值時,可以有非常有趣的方式利用它。
----我們可以對一些負的SQLCODE定制響應代碼,以減少CPU啟動和運行程序的開銷。例如,可以編寫程序處理-911(不能獲得要求的鎖,事務被回滾),程序可以簡單的重試,直到成功或重試計數到某一個值。但應該注意的是:出于數據完整性的理由,重試必須從程序恰當的執行點開始。重試點不一定是重新執行失敗的語句,尤其是對那些隱式地回滾事務的SQLCODE。
----負的SQLCODE通常代表程序執行中的意外錯誤,但某些情況下,可以編寫特定的SQL語句故意使程序獲得負值返回,然后通過測試預期的負值,簡化邏輯判斷的代碼,從而減少DB2頁面讀取的數目。
----例如,某一個大電話公司有兩種類型的發票:一種給只有一條電話線的住宅用戶,另一種給有多條電話線的公司用戶。在處理每一個客戶時,處理客戶發票的程序對該客戶做一次COUNT(電話賬單表非常大)。如果COUNT的結果為一,則程序轉入住宅用戶發票格式處理,如果COUNT的結果大于一,則轉入公司用戶發票格式處理。最后,在發票格式化的過程中,每個客戶的記錄又再次被讀入。在這種程序邏輯下,每一個客戶的賬單信息不必要地讀入了兩次,包括即些非常大的商業客戶,他們有幾百條電話線。
----其實可以將程序邏輯修改一下,對每一個客戶做的簡單的選擇(SELECT ...INTO ),然后測試返回的SQLCODE是否為+0(即僅有一條電話線,轉入住宅用戶發票格式),或者-811(多于一條電話線,單選操作失敗,轉入公司用戶發票格式)。顯而易見,這樣可以節省大量的時間。而其他的解決辦法或者需要改變表結構,并且占用數據庫管理員和程序員更多的時間。
----另一個利用SQLCODE來提高性能的例子如下:每一個輸入事務有兩種操作,如果有匹配記錄,則更新它,否則插入一條新記錄。效率低下的程序可能會首先做一個選取(SELECT),判斷記錄是否存在。然后當SQLCODE為+0時,已經有的記錄會再次被讀入并更新;當SQLCODE為+100時,插入新的記錄。更有效率的方法應該首先嘗試最常發生的情況。如果更新比插入更頻繁,則首先嘗試更新,并檢查SQLCODE是否為+0(成功更新了該記錄),如果SQLCODE為+100(未發現匹配的記錄),再插入該記錄。相反,如果插入比更新頻繁,則首先可以執行插入,并檢查SQLCODE是否為+0(成功插入),或者-803(發現重復記錄),這時再更新該記錄。任何一種方法都可以消除不必要的重復選擇開銷。
SQL警告

----大多數程序都忽略SQL警告,但這樣做并不合適,因為警告對于測潛在問題和簡化程序邏輯很有幫助,所以雖然警告不是嚴重信息,但不應該被忽略。
----在SQLCA中有兩個警告信息的指示:一個是SQLCODE大于+100;另一個是SQLWARN0域為W。當任何一個出現時,就表明在上一次調用時DB2發生了一些值得注意的事情,雖然DB2返回了數據,但是可能與預期的有出入。當SQLWARN0是W時,DB2也在其他SQLWARNn域提供了該問題的有用信息。
----試舉一例,下面這條SELECT語句中帶有數學表達式:
----SELECT empid,comm/salary INTO :hvempid, :hvcalc FROM EMPLOYEE
----如果在某一條記錄碰上了數學異常,例如被0除,則返回代碼-802。沒有數據返回,也不知道是哪一條記錄導致了該錯誤。但是,如果為數學表達式提供空值指示器宿主變量,改為:
----SELECT empid,comm/salary INTO :hvempid,:hvcalc :hvind FROM EMPLOYEE
----DB2將指示器變量設置為-2,并且返回SQLCODE為+802。這樣程序將獲得返回的empid,從而可以判斷哪個雇員的記錄造成了異常,程序也不需要終止。
----測試SQLWARN0是否為W也同樣有用。例如,如果程序將字符串數據選取到宿主變量中,而該變量的長度不足以容納整個字符串,則SQLCODE為+0,但數據被截斷了。通過提供指示器變量可以解決這個問題,DB2把SQLWARN0設為W,SQLWARN1設為W,并且將指示器變量設為原始串的長度,通過使用指示器變量中的值就可以判斷數據串的最大長度。
SQLERRD(3)
----SQLERRD數組的第三項是SQLCA中最有用的域之一。當成功地完成了插入、更新或刪除以后,該域被設置為插入、更新或刪除的記錄數。如果不知道SQLCA中含有這樣的信息而程序又需要它,則不得不首先做一下COUNT。更糟糕的是,如果程序邏輯是將每一條記錄選取到程序中,增加計數值,然后逐個地插入、更新或刪除每一條記錄,這樣就喪失了集合操作的好處。這時最好的辦法就是做SQL多記錄插入、更新或刪除,然后檢查SQLERRD(3),獲取需要的計數。
----然而也有例外的情況,首先,在SQL刪除語句后,SQLERRD(3)并不包括DB2參照完整性而導致的級連刪除的記錄數。其次,從分段的表空間中海量刪除(即DELETE語句無WHERE子名),在SQLERRD(3)以-1表示。因為DB2通過更新的記錄表空間映射頁來進行分段表空間的海量刪除,實際的記錄并未被讀取,因此無法計數。除了這兩個例外的情況,SQLERRD(3)可以用來節省DB2的讀取操作。
----SQLCA共有24個域,詳細內容可以參閱SQL參考手冊的附錄C,通過上述的例子說明,SQLCA中有用的域不僅是SQLCODE,靈活使用其他域,可以簡化程序邏輯,減少DB2調用次數,從而提高程序性能。


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产日本在线| 欧美高清视频在线 | 国产一区 二区 三区一级| 亚洲人久久久| 欧美二区在线看| 欧美一区二区三区久久精品| 欧美日韩一区二区三区在线视频| 亚洲国产婷婷香蕉久久久久久99 | 欧美激情视频网站| 欧美在线视频播放| 国产亚洲精品自拍| 久久久另类综合| 欧美一区二区福利在线| 小黄鸭精品密入口导航| 欧美性片在线观看| 亚洲在线一区二区三区| 99精品久久久| 国产精品日本精品| 欧美有码视频| 亚洲欧美日韩综合一区| 国产欧美在线| 久久综合九色综合欧美就去吻| 欧美有码视频| 在线观看欧美成人| 91久久国产精品91久久性色| 欧美 日韩 国产一区二区在线视频 | 99亚洲一区二区| 亚洲精品欧美| 国产精品免费aⅴ片在线观看| 亚洲欧美日韩国产一区二区| 亚洲视频日本| 国内精品一区二区| 欧美成人免费小视频| 麻豆久久精品| 亚洲影院在线观看| 久久人人97超碰精品888| 999亚洲国产精| 新67194成人永久网站| 亚洲黄色av一区| 亚洲一级高清| 亚洲国产小视频| 一本色道久久加勒比精品| 国产美女精品| 能在线观看的日韩av| 欧美性开放视频| 六月丁香综合| 国产精品成人在线观看| 久久久久国产精品厨房| 日韩视频在线观看| 国产视频一区在线观看| 亚洲二区免费| 欧美日韩的一区二区| 欧美在线免费观看视频| 欧美连裤袜在线视频| 久久日韩粉嫩一区二区三区| 欧美精品国产精品| 久久亚洲精品网站| 欧美三级在线视频| 免费人成网站在线观看欧美高清| 香蕉成人久久| 一本色道久久加勒比88综合| 亚洲午夜精品在线| 一区在线电影| 亚洲图色在线| 在线免费观看日本欧美| 亚洲国产精品www| 欧美日韩国产123区| 午夜精品国产精品大乳美女| 欧美电影在线免费观看网站| 欧美一区二区免费| 欧美精品成人一区二区在线观看| 久久久水蜜桃av免费网站| 国产精品久久久久毛片大屁完整版 | 一区二区电影免费在线观看| 亚洲国产成人久久综合一区| 欧美亚洲视频一区二区| 亚洲摸下面视频| 欧美精品v国产精品v日韩精品| 免费黄网站欧美| 国产在线观看精品一区二区三区| 久久久久久综合| 国产欧美日韩一区二区三区在线观看 | 99re6这里只有精品| ●精品国产综合乱码久久久久| 性欧美精品高清| 欧美一级专区免费大片| 国产精品日韩在线| 亚洲小说欧美另类婷婷| 99视频在线精品国自产拍免费观看 | 激情自拍一区| 欧美二区乱c少妇| 国产专区精品视频| 亚洲专区免费| 亚洲欧美成人一区二区三区| 欧美成熟视频| 亚洲国产成人porn| 亚洲黄页一区| 欧美国产日韩一区二区在线观看| 免费不卡在线视频| 在线成人激情视频| 亚洲激情网站免费观看| 亚洲国产综合视频在线观看| 久久综合图片| 亚洲国产一成人久久精品| 亚洲精品乱码久久久久久| 欧美丰满少妇xxxbbb| 亚洲精品国产精品乱码不99| 一区二区三区产品免费精品久久75| 欧美高清影院| 日韩午夜视频在线观看| 亚洲一区二区三区视频播放| 欧美色精品在线视频| 亚洲深夜福利网站| 欧美中文在线视频| 亚洲日本在线观看| 欧美成人午夜剧场免费观看| 久久亚洲国产精品一区二区 | 欧美视频一区二区在线观看| 艳妇臀荡乳欲伦亚洲一区| 性高湖久久久久久久久| 国产精品亚洲综合| 久久久久**毛片大全| 亚洲成色www久久网站| 欧美性猛交99久久久久99按摩| 一本一本久久a久久精品牛牛影视| 亚洲性夜色噜噜噜7777| 国产一区二区黄| 香蕉av福利精品导航| 麻豆久久婷婷| 亚洲一区视频在线观看视频| 国产亚洲一区二区三区在线观看| 久久久久久九九九九| 亚洲国产小视频| 久久精品女人| 999亚洲国产精| 国产亚洲综合性久久久影院| 欧美岛国在线观看| 午夜精品久久久久影视| 亚洲欧洲在线视频| 久久精品国产精品亚洲| 欧美日韩一区二区在线| 欧美中文字幕在线| 一本久道久久综合婷婷鲸鱼| 另类激情亚洲| 香蕉成人啪国产精品视频综合网| 亚洲成人资源| 国产日韩欧美| 欧美色欧美亚洲另类七区| 久久天天躁狠狠躁夜夜av| 亚洲一区精品视频| 亚洲精品欧美| 久久久天天操| 欧美在线综合| 午夜精彩视频在线观看不卡| 久久国产婷婷国产香蕉| 亚洲伦理在线| 99视频在线精品国自产拍免费观看 | 欧美欧美天天天天操| 欧美一区成人| 一区二区欧美日韩视频| 欧美激情一区二区三区不卡| 久久综合国产精品| 欧美在线视频全部完| 亚洲午夜激情| 日韩午夜剧场| 亚洲欧洲在线一区| 亚洲国产日本| 136国产福利精品导航网址应用| 国产精品国产三级国产a| 欧美日韩一本到| 欧美日韩中文在线| 亚洲亚洲精品三区日韩精品在线视频| 亚洲视频导航| 国产精品多人| 欧美日韩1区2区3区| 久久亚洲精品视频| 久久精品国产在热久久 | 欧美一区二区三区视频在线观看| 久久国产精彩视频| 亚洲欧美日韩视频二区| 一本色道久久综合| 欧美午夜视频一区二区| 韩日欧美一区| 韩国一区二区三区在线观看| 国产手机视频精品| 国产欧美日韩不卡| 国产人久久人人人人爽| 国产伦一区二区三区色一情| 国产伦精品一区二区三| 国产亚洲欧洲一区高清在线观看 | 久久精品视频在线播放| 欧美一区视频在线| 久久久国产91| 你懂的国产精品永久在线| 欧美成人免费网站| 亚洲精品国产精品国自产观看浪潮| 亚洲人人精品| 亚洲香蕉伊综合在人在线视看| 午夜欧美大片免费观看| 久久久久久久波多野高潮日日|