1. 程式人生 > >Oracle資料庫—遊標(cursor)例項

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;