Oracle游標(biāo)

Oracle游標(biāo)的關(guān)鍵子CURSOR,用來(lái)定義查詢出來(lái)的數(shù)據(jù)集,把內(nèi)存中的數(shù)據(jù)通過(guò)游標(biāo)一條一條的循環(huán)取出。

游標(biāo)種類

  1. 顯示游標(biāo)
    游標(biāo)使用之前必須先聲明,一般對(duì)查詢語(yǔ)句結(jié)果定義游標(biāo),然后通過(guò)打開(kāi)游標(biāo)循環(huán)取出結(jié)果集。
  2. 隱式游標(biāo)
    指PL/SQL管理,開(kāi)發(fā)者不能自己控制,只能獲得它的屬性。

顯示游標(biāo)

開(kāi)發(fā)中比較常用

  1. 聲明游標(biāo)
declare cursor cursor_name is select * from xxx;
  1. 打開(kāi)游標(biāo)
open cursor_name;
  1. 讀取游標(biāo)中的數(shù)據(jù)
fetch curos_name into record(變量)
  1. 關(guān)閉游標(biāo)
close cursor_name;

實(shí)例

declare
  --定義游標(biāo)
  cursor cur_xsjbxx is
    select * from stuinfo order by stuid;
  --定義記錄變量  
  ls_curinfo cur_xsjbxx%rowtype;
begin
  open cur_xsjbxx;--打開(kāi)游標(biāo)
  loop
    FETCH cur_xsjbxx
      INTO ls_curinfo;--獲取記錄值
    EXIT WHEN cur_xsjbxx%NOTFOUND;
   
    dbms_output.put_line('學(xué)號(hào):' || ls_curinfo.stuid || ',姓名:' ||
                         ls_curinfo.STUNAME);
  end loop;
  close cur_xsjbxx;--關(guān)閉游標(biāo)
end;

解析:配合loop語(yǔ)句來(lái)循環(huán)打印結(jié)果,通過(guò)游標(biāo)變量%NOTFOUND來(lái)獲取游標(biāo)的結(jié)束,跳出loop

顯式游標(biāo)的屬性

  1. %NOTFOUND.表示游標(biāo)獲是否還能提取數(shù)據(jù)。沒(méi)有數(shù)據(jù)時(shí)返回TRUE,有數(shù)據(jù)時(shí)返回FALSE
  2. %FOUND。與%NOTFOUND相反
  3. %ISOPEN。判斷游標(biāo)是否打開(kāi)
  4. %ROWCOUNT。表示游標(biāo)FETCH INTO獲取了多少記錄數(shù)。

實(shí)例

declare
  --定義游標(biāo)
  cursor cur_xsjbxx is
    select * from stuinfo order by stuid;
  --定義記錄變量  
  ls_curinfo cur_xsjbxx%rowtype;
begin
  open cur_xsjbxx;--打開(kāi)游標(biāo)
  loop
    FETCH cur_xsjbxx
      INTO ls_curinfo;--獲取記錄值
    EXIT WHEN cur_xsjbxx%NOTFOUND;
    --利用游標(biāo)計(jì)數(shù)器打印學(xué)生個(gè)數(shù)
    dbms_output.put('%rowcount計(jì)數(shù)器,第'||cur_xsjbxx%rowcount||'位學(xué)生,');
    dbms_output.put_line('學(xué)號(hào):' || ls_curinfo.stuid || ',姓名:' ||
                         ls_curinfo.STUNAME);
  end loop;
  close cur_xsjbxx;--關(guān)閉游標(biāo)
end;

隱式游標(biāo)

實(shí)例

declare
  ls_xsjbxx stuinfo%rowtype;
begin
  --查詢學(xué)生信息
  select * into ls_xsjbxx from stuinfo t where t.stuid = 'SC201801001';
  if sql%found then
    dbms_output.put_line('學(xué)號(hào):' || ls_xsjbxx.stuid || ',姓名:' ||
                         ls_xsjbxx.stuname);
  end if;
 
  --查詢學(xué)生信息(不存在的學(xué)生)
  select * into ls_xsjbxx from stuinfo t where t.stuid = 'SC201901001';
  if sql%found then
    dbms_output.put_line('學(xué)號(hào):' || ls_xsjbxx.stuid || ',姓名:' ||
                         ls_xsjbxx.stuname);
  end if;
exception
  when no_data_found then
    dbms_output.put_line('該學(xué)生SC201901001不存在');
end;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 2019-05-13 游標(biāo)(cursor)能夠根據(jù)查詢條件從數(shù)據(jù)表中提取一組記錄,將其作為一個(gè)臨時(shí)表置于數(shù)據(jù)緩沖區(qū)...
    Mr_J316閱讀 4,291評(píng)論 0 0
  • 前言 厚積而薄發(fā)。 在 PL/SQL 程序中,對(duì)于處理多行記錄的事務(wù)經(jīng)常使用游標(biāo)來(lái)實(shí)現(xiàn)。 游標(biāo)的概念 --為了處理...
    olaH閱讀 1,195評(píng)論 0 4
  • 游標(biāo)是一種 PL/SQL 控制結(jié)構(gòu);可以對(duì) SQL 語(yǔ)句的處理進(jìn)行顯示控制,便于對(duì)表的行數(shù)據(jù)逐條進(jìn)行處理。 游標(biāo)并...
    小母牛不生產(chǎn)奶閱讀 474評(píng)論 0 0
  • 1、Check規(guī)則 Check (Agebetween15and30 )把年齡限制在15~30歲之間 2、新SQL...
    姜海濤閱讀 1,011評(píng)論 0 4
  • 一、簡(jiǎn)介 1、游標(biāo)的概念 游標(biāo)(Cursor) 就是一個(gè)變動(dòng)的光標(biāo),它本質(zhì)上是一個(gè)指針,指向從數(shù)據(jù)庫(kù)查詢出來(lái)的結(jié)果...
    滴滴滴9527閱讀 2,220評(píng)論 0 1

友情鏈接更多精彩內(nèi)容