遊标
遊标是資料庫的一個資料緩沖區,存放SQL語句執行結果。
用于周遊結果集和定位結果集的一條記錄。
遊标隐性屬性
隐性遊标屬性 | 傳回值類型 | 意義 |
---|---|---|
%found | 布爾型 | 從遊标的結果集中擷取記錄時,找到了記錄,為true |
%notfound | 從遊标的結果集中擷取記錄時,結果集中沒有記錄,為true | |
%rowcount | 整型 | 代表DML語句成功執行的資料行數 |
%isopen | DML執行過程中為真,結束後為假 |
聲明遊标
cursor 遊标名稱 is select語句
使用遊标
for循環使用遊标
例:輸出emp表中的1004部門的員工 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;