天天看點

Oracle-cursor遊标

遊标

遊标是資料庫的一個資料緩沖區,存放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;