oracle遊標

目錄

 

1遊標 

1.1 定義遊標

1.2 打開遊標

1.3 從遊標中獲取數據

1.4 遊標for循環

1.5 遊標屬性


1遊標 

遊標:是構建在PL/SQL中用來記錄查詢數據庫結果的指針,他能夠一次性訪問一行結果集。允許以編程的方式訪問數據,在oralce 系統中分爲顯示遊標和隱式遊標。

1.1 定義遊標

主要是定義一個名詞來對應一條sql查詢語句,從而可以利用該遊標對查詢結果集進行業務操作。

語法 cursor cursor_name [(parameter....) ] [return result_type] is select statement

cursor_name 遊標名稱

parameter 輸入參數,用戶在使用遊標時輸入參數輔助,也可以使用默認值。輸入參數有多個,用逗號分隔

return result_type 操作返回類型 可選項

select statement 將要處理的查詢語句

如:

declare
 cursor test (dept number:=10)
 is
 select * from emp where dept:=dept;
 begin
 ..
end;

1.2 打開遊標

在聲明過遊標以後,該遊標並不會被oracle執行,只有在打開過遊標後才能執行查詢語句。在打開遊標過程中,如果有輸入參數,這時候需要爲這些參數賦值。

語法 open cursor_name [value[....]]

當打開遊標時會完成以下幾件事情:

  • 檢查聯遍變量的取值
  • 根據取值,確定活動集
  • 活動集的指針指向第一行
open test(10)

1.3 從遊標中獲取數據

在打開遊標後,如果想獲取結果集中的數據,就需要從遊標中獲取數據,這時候使用fetch語句,把獲取的單行數據保存到定義的變量中。

語法: fetch cursor_name into variable(,...) /pl/sql記錄

遊標中包含一個數據行指針,打開遊標後,指針指向結果集的第一行,fetch每執行一次,遊標向後移動一行,直到結束,遊標只能逐個向後移動,不能跳躍移動或者向前移動。當遊標的最後一條記錄是不存在的,爲空時,表示數據行已經遍歷完成,這時候遊標的%found 屬性爲false。

1.4 遊標for循環

使用for循環可以遍歷遊標,在打開遊標的過程中,不需要打開和關閉遊標,也不需要手動判斷遊標是否還有返回記錄。並在for循環語句中設置的循環變量值存儲了當前檢索記錄的所有值,所以不需要定義變量接受記錄值。

語法: for var_record in cursor_name loop

            pl/sql statement

            end loop;

            var_record 類型變量  cursor_name 遊標名稱  pl/sql statement pl/sql 語句

declare
cursor test (dept number:=10) -- 定義遊標
is 
    select * from emp where dept=dept ;
    begin
       for current in test loop
       ....
       end loop;
end;

1.5 遊標屬性

在遊標檢索的過程中檢索的時單行數據,而遊標返回的時一個結果集合,存在多行數據。這時候如何知道檢索的數據是結果集中的那一行,這時候我們就用到遊標的屬性%isopen %found %notfound %rowcount 。這些屬性描述遊標操作的執行情況。這些屬性只能存在PL/SQL的流程控制語句中,而不能使用在sql語句中

1%found

該屬性表示當前遊標是否指向有效一行,返回結果爲布爾值。通過這個屬性我們可以判斷是否結束遊標的使用

2% notfound

該屬性表示當前遊標是否指向有效一行,返回結果爲布爾值。通過這個屬性我們可以判斷是否結束遊標的使用。這個屬性值與%found類型 但是值正好相反。

3%rowcount

該屬性爲當前遊標所在的行數。這個屬性在循環判斷中有效,這時候不必檢索所有行,就可以中斷操作。

4%isopen 

是否打開遊標

declare

  vid  number;-- 聲明變量
  cursor test (vno number) is -- 定義遊標
  select * from emp where dept= vno;
begin
  if test%isopen = false then  -- 判斷遊標是否打開
   open test(20)
  end if;
  fetch test into vid ; -- 讀取當前遊標的數據
  while test%found  ;   -- 如果遊標有效,則執行循環
  loop
    if test%rowcount = 4 then
      exit
    end if;
  end loop;
end;

參考oracle 從入門到精通

下一篇 oracle 存儲過程 https://blog.csdn.net/lilongwangyamin/article/details/104405655

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章