版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第九章Oracle事務(wù)、觸發(fā)器和函數(shù)本章目標游標概念與分類游標的操作游標游標是SQL的一個內(nèi)存工作區(qū),由系統(tǒng)或用戶以變量的形式定義。游標的作用就是用于臨時存儲從數(shù)據(jù)庫中提取的數(shù)據(jù)塊。游標分為三種類型:隱式Cursor顯式CursorRefCursor(動態(tài)Cursor)。隱式游標對于Select…INTO…語句,一次只能從數(shù)據(jù)庫中獲取到一條數(shù)據(jù),對于這種類型的DMLSql語句,就是隱式Cursor。例如:Select/Update/Insert/Delete操作。作用:可以通過隱式Cusor的屬性來了解操作的狀態(tài)和結(jié)果,從而達到流程的控制。隱式Cursor是系統(tǒng)自動打開和關(guān)閉Cursor。Cursor的屬性包含:SQL%ROWCOUNT整型代表DML語句成功執(zhí)行的數(shù)據(jù)行數(shù)。SQL%FOUND布爾型值為TRUE代表插入、刪除、更新或單行查詢操作成功。SQL%NOTFOUND布爾型與SQL%FOUND屬性返回值相反。SQL%ISOPEN布爾型DML執(zhí)行過程中為真,結(jié)束后為假。隱式游標示例1用隱式的游標判斷是否修改數(shù)據(jù)成功:setserveroutputon;beginupdatepersonsetid='P003'whereid='P010';ifSQL%FOUNDthendbms_output.put_line('updatesuccessfull');commit;elsedbms_output.put_line('updatefaulied');endif;end;隱式游標示例2判斷影響的行數(shù):setserveroutputon;declarerowCountinteger;beginupdatepersonsetname='Jack';rowCount:=SQL%ROWCOUNT;--輸出本次共影響幾行
dbms_output.put_line('Effectedrowsis:'||rowCount);end;顯式Cursor
對于從數(shù)據(jù)庫中提取多行數(shù)據(jù),就需要使用顯式Cursor。顯式Cursor的屬性包含:%ROWCOUNT整型獲得FETCH語句返回的數(shù)據(jù)行數(shù)。%FOUND布爾型最近的FETCH語句返回一行數(shù)據(jù)則為真,否則為假。%NOTFOUND布爾型與%FOUND屬性返回值相反。%ISOPEN布爾型游標已經(jīng)打開時值為真,否則為假。對于顯式游標的運用分為四個步驟:定義游標---Cursor[CursorName]IS;必須要使用is.打開游標---Open[CursorName];操作數(shù)據(jù)---Fetch[Cursorname]intosomeVar;判斷游標是否獲取到行值exitwhenc1%notfound;關(guān)閉游標---Close[CursorName],這個Step絕對不可以遺漏。顯式Cursor用法-1遍歷數(shù)據(jù):setserveroutputon;declarersperson%rowType;cursorc1isselect*fromperson;beginopenc1;loopfetchc1intors;--每一次將值寫到rs記錄集中
exitwhenc1%notfound;--判斷是否獲取到了數(shù)據(jù)
dbms_output.put_line('行號:'||c1%rowcount||'編號'||rs.id||'姓名'||);endloop;ifc1%isopenthen–關(guān)閉游標
closec1;endif;end;顯式Cursor用法-2setserveroutputon;declarecursorc1isselectid,namefromperson;--聲明兩個變量
v_idperson.id%type;v_%type;beginopenc1;loop--分別對應(yīng)寫入兩個值,注意與select語句的對應(yīng)關(guān)系
fetchc1intov_id,v_name;exitwhenc1%notfound;DBMS_OUTPUT.put_line('Nameis:'||v_name);endloop;ifc1%isopenthenclosec1;endif;end;顯式Cursor用法-3setserveroutputon;declarecursorc1isselect*fromperson;begin--使用for..in直接打開的游標,直接使用rs變量即可
forrsinc1loopdbms_output.put_line(rs.id||''||);endloop;ifc1%isopenthenclosec1;endif;end;綜合示例declarecursorclisselectempno,empjobfromemp;--定義光標保存查詢結(jié)果
pnoemp.empno%TYPE;pjobemp.empjob%TYPE;beginopencl;--打開游標,即執(zhí)行查詢
loop--循環(huán)開始
fetchclintopno,pjob;--取一條記錄中的員工編號和工種,并賦給pnopjobexitwhencl%notfoun--退出循環(huán)條件
--判斷員工工種,執(zhí)行加薪
ifpjob='PRESIDENT'thenupdateempsetsal=salwhereempno=pno;elseifpjob='MANAGER'thenupdateempsetsal=sal+800whereempno=pno;elseupdateempsetsal=sal+400whereempno=pno;endif;endloop;closecl;--關(guān)閉游標
commit;--提交end;/按員工的工種長工資,總裁1000元,經(jīng)理長800元其,他人員長400元RefCursor(動態(tài)游標)與隱式Cursor,顯式Cursor的區(qū)別:RefCursor是可以通過在運行期間傳遞參數(shù)來獲取數(shù)據(jù)結(jié)果集。而另外兩種Cursor,是靜態(tài)的,在編譯期間就決定數(shù)據(jù)結(jié)果集。Refcursor的使用:Type[Cursortypename]isrefcursor;Define動態(tài)的Sql語句Opencursor操作數(shù)據(jù)---Fetch[Cursorname]CloseCursor動態(tài)游標示例declaretypecursor_typeisrefcursor;myCursorcursor_type;v_sqlvarchar2(500);v_personperson%rowType;beginv_sql:='select*frompersonwherenamelike''%a%''';openmyCursorforv_sql;loopfetchmyCursorintov_person;exitwhenmycursor%notfound;dbms_output.put_line(v_person.id||v_);endloop;exception--異常處理塊,確保關(guān)閉游標
whenothersthenclosemyCursor;ifmyCursor%isopenthenclosemyCursor;endif;end;帶參數(shù)的游標示例語法:聲明參數(shù),不可以聲明大小cursorc2(jobcvarchar2)isselectename,salfromempwherejob=jobc;執(zhí)行語句:Openc2(‘clerk’);帶參數(shù)的游標示例setserveroutputon;declarecursorc1(p_idvarchar2)isselect*frompersonwhereid=p_id;begin--注意下面的參數(shù),或是使用openc1('P001');forrsinc1('P002')loopdbms_output.put_line(rs.id||);endloop;end;游標綜合示例用游標刪除用戶指定的時間創(chuàng)建的表:begin opencur; loop fetchcurintov_name; exitwhencur%notfound; v_sql:=‘droptable’||v_name; dbms_output.put_line(v_sql); executeimmediatev_sql;--動態(tài)執(zhí)行sql endloop; executeimmediatev_sql; exception whenot
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開放式基金交易服務(wù)合同
- 2024簡單銷售代理合同樣本
- 合同范本:委托招商引資協(xié)議書
- 二手車購車合同協(xié)議樣本
- 2024照明購銷合同
- 企業(yè)與高校就業(yè)實習協(xié)議書參考
- 代理公司注冊登記協(xié)議書
- 培訓(xùn)機構(gòu)老師合作協(xié)議示例
- 正規(guī)版房屋租賃合同協(xié)議范本
- 全面聘用合同范本匯編
- GB/T 5210-2006色漆和清漆拉開法附著力試驗
- GB/T 40019-2021基礎(chǔ)制造工藝通用元數(shù)據(jù)
- GB 29837-2013火災(zāi)探測報警產(chǎn)品的維修保養(yǎng)與報廢
- GA/T 1502-2018法庭科學視頻中人像動態(tài)特征檢驗技術(shù)規(guī)范
- 問題解決型QC培訓(xùn)課件
- 西氣東輸計量交接憑證填報培訓(xùn)PPT-場站課件
- 中國特色社會主義理論與實踐研究知識點整理及思考題答案
- 《居家養(yǎng)老服務(wù)問題及對策探究【論文】6000字》
- 三1班反邪教教育主題班會記錄
- 5、風電吊裝施工指導(dǎo)手冊
- 中國郵政儲蓄銀行招聘考試試題
評論
0/150
提交評論