資源描述:
《理解游標(biāo)(2)游標(biāo)的屬性介紹及不同游標(biāo)類別的案例演示》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、理解游標(biāo)(2)游標(biāo)的屬性介紹及不同游標(biāo)類別的案例演示?相關(guān)鏈接:理解游標(biāo)(1):游標(biāo)的概述??PL/SQL提供了六種游標(biāo)屬性:游標(biāo)屬性名字說明舉例%FOUND如果成功取到記錄就返回true;否則,返回falsebegin?updatetsetname='f'whereid=2;ifSQL%FOUNDthen??dbms_output.put_line('cursorattribute'www.lunwen360.net);endif;end;%NOTFOUND如果沒有成功取到記錄就返回true;否則,返回fa
2、lse%FOUND和%NOTFOUND是相反屬性,到底什么時候使用%FOUND什么時候又該用%NOTFOUND呢?要看使用哪一個屬性表達(dá)得最自然,比如:?www.2cto.com??exitwhennotsql%foundexitwhensql%notfound顯然,后者更自然%ROWCOUNT返回到目前為止,已經(jīng)從游標(biāo)中取出的記錄數(shù)量begin?updatetsetname='f'whereid=2;?dbms_output.put_line('rowsselected:'
3、
4、sql%rowcount);e
5、nd;rowsselected:1%ISOPEN如果游標(biāo)是打開的就返回true;否則,返回false通常用在確保當(dāng)發(fā)生異常情況后游標(biāo)不會一直打開著而不關(guān)閉exception?whenothersthen?ifcursor_name%ISOPENthen??closecursor_name;?endif;%BULK_ROWCOUNT返回forall語句修改的記錄數(shù)量%BULK_EXCEPTIONS返回forall語句修改記錄時出現(xiàn)的異常信息?????我們可以在pl/sql中使用這些游標(biāo)屬性,但不能再sql語句中
6、使用????要使用一個游標(biāo)屬性,只需要在游標(biāo)名字或游標(biāo)變量后面加上%就可以,比如:cursor_name%attribute_name????對于一個隱式游標(biāo),游標(biāo)的名字固定就是“SQL”,比如SQL%FOUND?????下面以t表為例,對各種游標(biāo)類別作簡單使用介紹[sql]?SQL>rollback;???Rollbackcomplete???SQL>select*fromt;???????IDNAME?------------------------------??????1a??????2b??????
7、3c??????4d??????5e??????①隱式游標(biāo)實例:[sql]?begin??--執(zhí)行DML操作??updatetsetname='ff'whereid=5;??--判斷是否有受影響行??ifsql%foundthen???--打印受影響行數(shù)???dbms_output.put_line('影響行數(shù):'
8、
9、sql%rowcount);??endif;??--判斷是否沒有受影響行??ifsql%notfoundthen???dbms_output.put_line('id為5的記錄不存在');??e
10、ndif;??end;??????②無參顯式游標(biāo)實例:[sql]?declare??--聲明游標(biāo)表變量并關(guān)聯(lián)sql??cursorrowListis???select*fromt;??--聲明行變量??--如果上面的查詢語句只有一個查詢字段,這里也可以使用正常的變量聲明方式(v_rowValuevarchar2(20);)。??rowValuet%rowtype;?begin??openrowList;--打開游標(biāo)??--如果確定游標(biāo)中只有一條記錄的話,loop和endloop可以不寫,而exit必須存在于游
11、標(biāo)循環(huán)內(nèi),所以也不需要寫。??loop???fetchrowList????intorowValue;--取出游標(biāo)內(nèi)的值放到rowValue中???exitwhenrowList%notfound;--判斷是否還存在記錄,如果不存在終止游標(biāo)???dbms_output.put_line(rowValue.name);--將取到的值打印,如果查詢只有一個字段這里只需寫變量名即可。??endloop;??closerowList;--關(guān)閉游標(biāo)?end;??????③有參顯式游標(biāo)實例:[sql]?declare??
12、--聲明帶參數(shù)的游標(biāo)變量并關(guān)聯(lián)sql,并將參數(shù)與sql進(jìn)行關(guān)聯(lián)??cursorrowList(c_namevarchar2,c_idnumber)is???select*fromtwheret.name=c_nameandt.id=c_id;??--聲明行變量??--如果上面的查詢語句只有一個查詢字段,這里也可以使用正常的變量聲明方式(v_rowValuevarchar2(20);)。??rowVa