国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Oracle顯式光標(biāo)應(yīng)用舉例及缺陷分析

2012-04-29 00:44:03陳一匡
電腦知識與技術(shù) 2012年30期
關(guān)鍵詞:數(shù)據(jù)庫技術(shù)

摘要:顯式光標(biāo)又稱為用戶自定義光標(biāo),通過用戶對光標(biāo)自行定義來解決PL/SQL程序中查詢返回多行的問題。該文主要介紹作者在Oracle顯式光標(biāo)應(yīng)用的教學(xué)過程中的舉例,討論了相關(guān)例子的缺陷并提出解決的方法。

關(guān)鍵詞:Oracle;顯式光標(biāo);數(shù)據(jù)庫技術(shù)

中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)30-7148-02

Oracle使用一個(gè)稱為Private SQL Area的工作區(qū)執(zhí)行SQL語句,以保存語句執(zhí)行結(jié)果和相關(guān)的狀態(tài)信息。對于PL/SQL程序中查詢返回多行的問題,Oracle采用光標(biāo)來解決。光標(biāo)是一個(gè)可以命名的緩沖區(qū),用于保存查詢語句返回的多行數(shù)據(jù)。程序通過光標(biāo)名可以訪問光標(biāo)區(qū)的內(nèi)容。光標(biāo)有兩種類型,分別是隱式光標(biāo)(系統(tǒng)預(yù)定義光標(biāo))和顯式光標(biāo)(用戶自定義光標(biāo))。隱式光標(biāo)的光標(biāo)名為SQL,該光標(biāo)區(qū)內(nèi)主要保存執(zhí)行SQL語句的一些狀態(tài)信息或者統(tǒng)計(jì)信息,通過光標(biāo)的幾個(gè)屬性可以訪問到這些信息。比如SQL%FOUND,查詢最近執(zhí)行的DML語句是否對相關(guān)記錄進(jìn)行了處理,如果有,返回一個(gè)邏輯值真,否則返回為假;SQL%ROWCOUNT,可以查詢最近執(zhí)行的一條SQL語句對多少條記錄進(jìn)行了處理。因?yàn)殡[式光標(biāo)是數(shù)據(jù)庫管理系統(tǒng)預(yù)先定義,因此在操作過程中存在無法與實(shí)際問題完全相對應(yīng),不夠靈活等問題。為了解決上述問題,Oracle提供了顯式光標(biāo)讓用戶可以對光標(biāo)自行定義。

1 前級知識

要完全掌握光標(biāo)的定義方法并將其應(yīng)用于實(shí)際問題的解決,首先要掌握關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQL。SQL語言包括了查詢、數(shù)據(jù)修改、定義、控制和管理等內(nèi)容,是一種功能全面的關(guān)系數(shù)據(jù)庫語言,有一個(gè)國際標(biāo)準(zhǔn),各個(gè)數(shù)據(jù)庫廠家在該標(biāo)準(zhǔn)的基礎(chǔ)上做不同的擴(kuò)充;其次,為了提高SQL語言數(shù)據(jù)處理的效率且支持復(fù)雜問題的處理,Oracle系統(tǒng)對SQL語言進(jìn)行了擴(kuò)充,其過程化的擴(kuò)充部分稱為PL/SQL,是Oracle系統(tǒng)的核心編程語言。

2 應(yīng)用舉例

介紹顯式光標(biāo)應(yīng)用經(jīng)常用到一個(gè)例子,編寫一個(gè)程序來為職工漲工資。程序要達(dá)到的要求是:從最低工資漲,每人漲10%,工資總額限制在50萬元以內(nèi),如果所有職工都漲了一遍,工資總額還沒到50萬元,也到此為止,最后將新的工資總額和漲了工資的職工人數(shù)輸出。程序如下:

3 缺陷分析和解決方法

職工的人數(shù)和原先工資總額將導(dǎo)致上述程序出現(xiàn)三種結(jié)果。第一種情況:還沒開始給職工漲工資就發(fā)現(xiàn)工資總額已經(jīng)超過或等于50萬,此時(shí)程序?qū)⒉粫M(jìn)入循環(huán)體而是直接將漲工資職工人數(shù)為0和原來的工資總額輸入到msg表中并提交事務(wù);第二種情況:當(dāng)所有職工都漲了工資,但工資總額還是沒有到達(dá)50萬,程序完成任務(wù)并結(jié)束;在上述兩種情況下,程序都能發(fā)揮正常的作用。第三種情況:只有部分職工漲了工資,工資總額就達(dá)到或者超過了50萬,此時(shí)程序就會導(dǎo)致錯(cuò)誤的結(jié)果。當(dāng)輪到某位職工漲工資,此時(shí)工資總額還沒達(dá)到50萬,程序進(jìn)入循環(huán)體,該職工的工資上漲了10%,然后計(jì)算新的工資總額并將漲工資職工人數(shù)加1,退出循環(huán)體并再次判斷工資總額是否達(dá)到或者超過50萬時(shí),發(fā)現(xiàn)新的工資總額已經(jīng)達(dá)到或者超過了50萬,于是將漲工資職工人數(shù)和工資總額輸入到msg表中并結(jié)束整個(gè)程序。顯而易見,最后工資總額達(dá)到或者超過了50萬,違背了原先的設(shè)計(jì)要求。導(dǎo)致錯(cuò)誤結(jié)果的原因在于先給職工漲工資,然后才計(jì)算新的工資總額。因此解決的方法是先計(jì)算某位職工漲工資的情況下,新的工資總額是否小于50萬。如果是,則漲該職工的工資,如果否,則不漲該職工的工資并提交事務(wù)。完善后的程序如下:

4 結(jié)束語

雖然在PL/SQL程序中可以采用其它方法替代顯式光標(biāo),但是使用顯式光標(biāo)顯然是解決查詢中返回多條記錄的最佳方式。如何將顯式光標(biāo)跟PL/SQL程序更好的結(jié)合在一起,避免出現(xiàn)漏洞,考驗(yàn)著每一個(gè)數(shù)據(jù)庫設(shè)計(jì)者的技術(shù)和經(jīng)驗(yàn),也是每一個(gè)編程人員應(yīng)該去不斷完善的技能。

參考文獻(xiàn):

[1] 王行言,湯荷美,黃維通. 數(shù)據(jù)庫技術(shù)及應(yīng)用[M].2版.北京:高等教育出版社,2004.

[2] 陳一匡.數(shù)據(jù)庫技術(shù)教學(xué)心得點(diǎn)滴[J].電腦學(xué)習(xí),2009(3):78-79.

[3] 張學(xué)琴.基于Oracle數(shù)據(jù)庫的SQL語句優(yōu)化[J].電腦知識與技術(shù),2010(1):20-25.

[4] 劉佳.淺談ORACLE數(shù)據(jù)庫中的SQL優(yōu)化原理與應(yīng)用[J].科技風(fēng),2012(2):77.

猜你喜歡
數(shù)據(jù)庫技術(shù)
計(jì)算機(jī)數(shù)據(jù)庫技術(shù)在信息管理中的運(yùn)用
數(shù)據(jù)庫技術(shù)在云計(jì)算背景下的應(yīng)用
新形勢下數(shù)據(jù)庫原理的雙語教學(xué)
數(shù)據(jù)庫課程微課設(shè)計(jì)及應(yīng)用
基于Web的數(shù)據(jù)庫技術(shù)探究
基于項(xiàng)目驅(qū)動的《SQLServer數(shù)據(jù)庫應(yīng)用》教學(xué)思考
考試周刊(2016年28期)2016-05-27 15:01:32
丹棱县| 新昌县| 施甸县| 资中县| 万年县| 通河县| 元阳县| 新野县| 佛学| 泰顺县| 宜宾市| 丰宁| 沛县| 勃利县| 泰宁县| 资兴市| 泸定县| 莎车县| 清徐县| 望江县| 长垣县| 漳州市| 武义县| 黔西| 潞西市| 马龙县| 射阳县| 玛纳斯县| 临泽县| 遂川县| 安康市| 长岭县| 廉江市| 宁陕县| 枞阳县| 民乐县| 潞城市| 西峡县| 宜州市| 灵山县| 郑州市|