Oracle遊標(CURSOR)

來源:互聯網
上載者:User

PL/SQL包含兩種遊標:1.顯示遊標 2.隱式遊標

顯示遊標:
文法:
CUROSR cursor_name is select_statement;
開啟遊標:open cursor_name;
提取資料:兩種:1.FETCH curosr_name INTO varible1,variable2....;
       2.FETCH cursor_name BULK COLLECT INTO  collect1,collect2,....[LIMIT rows];
關閉遊標:CLOSE cursor_name;

顯示遊標屬性:
1.%ISOPEN:該屬性用於確定遊標是否已經開啟。如果開啟,返回true, 否則返回false;
2.%FOUND:該屬性檢查是否從資料集中提取到了資料。有資料為true,反之為false;
3.%NOTFOUND:與%FOUND相反。
4.%ROWCOUNT:返回當前行為已經提取到的實際行數。

注意:1.當用FETCH已經取到遊標的末尾時,再對遊標進行取值,遊標會返回結果集中的最後一條記錄,因為,當遊標再結果集中取不到值時會返回給使用者遊標緩衝區的內容(也就是結果集中的最後一條記錄);
2.以上的屬性只針對於遊標的目前狀態。
3.之前的巢狀表格、變長數組的使用都是需要初始化的,這裡注意的是:當在顯示遊標中使用FETCH語句對巢狀表格或變長數組賦值時,是不需要初始化大小的。

參數遊標:
文法:CURSOR cursor_name(parameter_name datatype)IS select_statement;
1.對於遊標的參數可以使用DEFAULT關鍵字對參數設定預設值,調用時若不給此參數傳值,則會調用預設值。
2.對參數遊標進行取值時只能用FETCH(一般的遊標,可以使用for遍曆取值);

使用遊標更新或刪除資料:
文法:(更新)UPDATE table_name SET column=.. WHERE CURRENT OF cursor_name;
     (刪除)DELETE FROM table_name WHERE CURRENT OF cursor_name;
1.在對 遊標進行更行時需要在遊標文法後面加上 for update [,WAIT num][,OF col];
解析:for update:表名此遊標對所使用的表獨佔,防止其他人對此表同時操作。
      wait:wait 秒數,指當所操作的表被鎖定時,等待幾秒再執行,若依然是鎖定狀態,則會拋出異常,可以設定為NOWAIT不需要等待。
      OF col:列級鎖,使用此鎖的列所在的一行記錄都被鎖定。

遊標變數:
文法:TYPE ref_type_name IS CURSOR [RETURN return_type];
建立完類型後要使用需要聲明:cursor_name ref_type_name;
開啟遊標:OPEN cursor_name for select_statement;
使用FETCH取值:與顯示遊標一樣。
關閉遊標:與顯示遊標一樣。

文法解析:
[RETURN return_type]:類型限制,只能返回限定的資料類型;

更多Oracle相關資訊見Oracle 專題頁面 http://www.bkjia.com/topicnews.aspx?tid=12

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.