遊標是一個指針,在上下文區域。PL / SQL通過光標控製上下文區域。遊標的行可能會返回的一個或多個SQL語句。這些設置的行;光標將被稱為活動。有兩種類型的遊標:
- 隱式遊標
這些遊標是自動創建的Oracle,每當有一個沒有顯式遊標的語句。隱式遊標並不是由程序員控製。當有一個DML語句。、插入、更新、刪除,一個隱式遊標的語句。有不同類型的隱式遊標可用屬性,它們是:
- %發現——這個屬性返回true,如果插入、刪除和更新語句是受一個或多個行或如果select into語句返回一個或多個行,否則它返回false。
- % NOTFOUND——這個屬性是相反的%發現屬性,返回true,如果插入、刪除和更新語句不受一個或多個行或如果select into語句返回沒有行,否則它返回false。
- % ISOPEN——這對隱式遊標屬性總是返回false,因為Oracle關閉SQL遊標後自動完成相關的SQL語句的執行。
- % ROWCOUNT——這返回的行數,影響插入、刪除和更新語句或返回的SELECT INTO語句。
我們可以訪問任何SQL遊標屬性的SQL % attribute_name。
例子:參考表中創建函數部分。從教師SELECT *;聲明total_rows數量(2);開始更新教師設置工資=工資+ 100;如果sql % notfound那麼dbms_output。put_line(“沒有教師選擇”);ELSEIF sql %發現然後total_rows: sql = % rowcount;dbms_output。put_line (total_rows | |“教師選擇”);如果; END; /
輸出:
5教師選擇
PL / SQL過程成功完成。
我們可以檢查行;他們將被更新。
從教師選擇*。
ID |
的名字 |
年齡 |
地址 |
工資 |
1 |
Ranjitha |
34 |
班加羅爾 |
2100年 |
2 |
賽 |
30. |
海德拉巴 |
2600年 |
3 |
Shakthi |
34 |
浦那 |
3100年 |
4 |
Gayathri |
36 |
班加羅爾 |
4100年 |
5 |
Vignesh |
34 |
孟買 |
4600年 |
- 顯式遊標——這些遊標programmer-defined遊標獲取控製上下文區域。這些遊標在聲明部分中定義的塊。這是上創建一個select語句,它返回多個行。
語法:
光標cursor_name select_statement;
我們正在與顯式遊標時,包括以下步驟:
- 光標應宣布對內存進行初始化。
- 光標應該打開分配內存。
- 獲取光標來檢索數據。
- 然後關閉遊標釋放分配的內存。
聲明遊標:這個定義遊標的名稱和相關的select語句。
光標t_teachers是
從教師選擇id、名稱、地址;
打開遊標:這為指針分配內存,也準備獲取的行。
開放t_teachers;
關閉遊標:這意味著釋放分配的內存。
關閉t_teachers;
獲取光標:這意味著訪問一次一行。
獲取t_teachers t_id, t_name;
例子:
聲明
t_id teachers.id %類型;
t_name teachers.name %類型;
t_addr teachers.address %類型;
光標t_teachers是
從教師選擇id、名稱;
開始開放t_teachers;循環獲取t_teachers t_id, t_name;t_teachers % notfound時退出;dbms_output。put_line (t_id | |的| | t_name | |”);結束循環;關閉t_teachers;結束;/
輸出:
1 ranjitha
兩個賽
3 shakthi
4 gayathri
5 vignesh
PL / SQL過程成功完成。