Oracle資料庫——遊標(cursor)
遊標
遊標是資料庫的一個數據緩衝區,存放SQL語句執行結果。
用於遍歷結果集和定位結果集的一條記錄。
遊標隱性屬性:
隱性遊標屬性 | 返回值型別 | 意義 |
%found | 布林型 | 從遊標的結果集中獲取記錄時,找到了記錄,為true |
%notfound | 布林型 | 從遊標的結果集中獲取記錄時,結果集中沒有記錄,為true |
%rowcount | 整型 | 代表DML語句成功執行的資料行數 |
%isopen | 布林型 | DML執行過程中為真,結束後為假 |
宣告遊標
cursor 遊標名稱 is select語句
使用遊標
例:輸出emp表中的1004部門的員工
for迴圈使用遊標
declare
--宣告遊標,emp_corsor裡面儲存了select語句的多行記錄
cursor emp_corsor is select ename,ejob,esalary,ecomn from emp where did='1004';
--宣告變數c_row使用rowtype型別,儲存一條記錄
c_row emp_corsor%rowtype;
begin
--遍歷遊標emp_corsor,把獲取的每一條記錄儲存到c_row中
for c_row in emp_corsor loop
dbms_output.put_line(c_row.ename||'-'||c_row.ejob||'-'||c_row.esalary||'-'||c_row.ecomn);
end loop;
end;
fetch使用遊標
----------必須先要開啟遊標,用完後需要關閉
開啟遊標
open 遊標名稱;
關閉遊標
close 遊標名稱;
declare
--宣告遊標,emp_corsor裡面儲存了select語句的多行記錄
cursor c_emp is select esalary,ecomn from emp where did='1004';
--宣告變數c_row使用rowtype型別,儲存一條記錄
c_row c_emp%rowtype;
begin
--開啟遊標
open c_emp;
--迴圈輸出資料
loop
--將c_emp遊標中的記錄,提取一行記錄到c_row
fetch c_emp into c_row;
--%notfound 找不到時候返回ture,找到值返回false
--結合exit使用,判讀是否提取到值,沒取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_emp%notfound;
dbms_output.put_line(c_row.esalary||'-'||c_row.ecomn);
end loop;
--關閉遊標
close c_emp;
end;