IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)Oracle → ORACLE PLSQL游標(biāo)學(xué)習(xí)

ORACLE PLSQL游標(biāo)學(xué)習(xí)

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  游標(biāo)

  游標(biāo)是指向上下文區(qū)域的句柄或指針

  上下文區(qū)域--用于SQL處理的內(nèi)存區(qū)

  上下文區(qū)域的內(nèi)容

  語(yǔ)句處理的行數(shù)

  指向語(yǔ)句的語(yǔ)法分析表示的指針

  游標(biāo)的類型

  1、靜態(tài)游標(biāo)

  隱式游標(biāo)

  顯示游標(biāo)

  2、REF游標(biāo)(動(dòng)態(tài)游標(biāo))

  一、隱式游標(biāo)

  有ORACLE在內(nèi)部聲明

  用于處理

  DML語(yǔ)句

  返回單行的查詢

  游標(biāo)屬性:

  1、%NOTFOUND 對(duì)數(shù)據(jù)操作成功返回FALSE,否則返回TRUE

  2、%FOUND? 對(duì)數(shù)據(jù)操作成功返回TRUE,否則返回FALSE

  3、%ROWCOUNT? 游標(biāo)影響的行數(shù)

  4、%ISOPEN?? 游標(biāo)是否打開(kāi)

  begin

  insert into cities values('aaa','bbb');

  DBMS_OUTPUT.PUT_LINE('游標(biāo)所影響的行數(shù):'||SQL%ROWCOUNT);

  if SQL%NOTFOUND then

  DBMS_OUTPUT.PUT_LINE('NOTFOUND為真');

  else

  DBMS_OUTPUT.PUT_LINE('NOTFOUND為假');

  end if;

  if SQL%FOUND then

  DBMS_OUTPUT.PUT_LINE('FOUND為真');

  else

  DBMS_OUTPUT.PUT_LINE('FOUND為假');

  end if;

  if SQL%ISOPEN then

  DBMS_OUTPUT.PUT_LINE('ISOPEN為真');

  else

  DBMS_OUTPUT.PUT_LINE('ISOPEN為假');

  end if;

  end;

  輸出結(jié)果為:

  游標(biāo)所影響的行數(shù):1

  NOTFOUND為假

  FOUND為真

  ISOPEN為假

  declare

  icount int :=0;

  begin

  insert into cities values ('aaa','bbb');

  if SQL%NOTFOUND then

  DBMS_OUTPUT.PUT_LINE('沒(méi)有插入成功');

  else

  DBMS_OUTPUT.PUT_LINE('插入成功');

  end if;

  commit;

  end;

  輸出結(jié)果為:

  插入成功

  declare

  icount int :=0;

  begin

  update cities set country='aaaa';

  if SQL%NOTFOUND then

  DBMS_OUTPUT.PUT_LINE('沒(méi)有更新成功');

  else

  DBMS_OUTPUT.PUT_LINE('更新成功');

  end if;

  commit;

  end;

  輸出結(jié)果為:

  更新成功

  二、顯式游標(biāo)

  由用戶顯式聲明

  游標(biāo)將指向活動(dòng)集中的當(dāng)前行

  控制顯示游標(biāo)

  Open

  Fetch

  Close

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  fetch empCur into emprow;

  DBMS_OUTPUT.put_line(emprow.empno||'? '||emprow.ename);

  close empCur;

  end;

  輸出結(jié)果

  7369? SMITH

  loop循環(huán)

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  loop

  fetch empCur into emprow;

  DBMS_OUTPUT.put_line(emprow.empno||'? '||emprow.ename);

  DBMS_OUTPUT.put_line('提取了'||empCur%ROWCOUNT||'行');

  --exit when empCur%NOTFOUND;

  if empCur%NOTFOUND then

  exit ;

  end if;

  end loop;

  close empCur;

  end;

#p#副標(biāo)題#e#

  while循環(huán)

  declare

  cursor empCur is select * from emp;

  emprow emp%ROWTYPE;

  begin

  open empCur;

  fetch empCur into emprow;

  while empCur%FOUND loop

  DBMS_OUTPUT.put_line(emprow.empno||'? '||emprow.ename);

  DBMS_OUTPUT.put_line('提取了'||empCur%ROWCOUNT||'行');

  fetch empCur into emprow;

  end loop;

  close empCur;

  end;

  輸出結(jié)果

  7369? SMITH

  提取了1行

  7499? ALLEN

  提取了2行

  7521? WARD

  提取了3行

  7566? JONES

  提取了4行

  7654? MARTIN

  提取了5行

  7698? BLAKE

  提取了6行

  7782? CLARK

  提取了7行

  7788? SCOTT

  提取了8行

  7839? KING

  提取了9行

  7844? TURNER

  提取了10行

  7876? ADAMS

  提取了11行

  7900? JAMES

  提取了12行

  7902? FORD

  提取了13行

  7934? MILLER

  提取了14行

  7934? MILLER

  提取了14行

  for循環(huán)

  循環(huán)游標(biāo)

  顯式游標(biāo)的替代方法

  它的工作原理是什么:

  隱式打開(kāi)游標(biāo)

  自動(dòng)從活動(dòng)集獲取行

  在處理完所有行時(shí)關(guān)閉游標(biāo)

  優(yōu)點(diǎn):

  簡(jiǎn)化代碼的編寫

  declare

  cursor empCur is select * from emp where sal>&intputsal;--綁定變量

  iCount int ;

  begin

  iCount := &Count;

  DBMS_output.put_line(iCount);

  for emprow in empCur loop

  DBMS_OUTPUT.put_line(emprow.empno||'? '||emprow.ename);

  DBMS_OUTPUT.put_line('提取了'||empCur%ROWCOUNT||'行');

  end loop;

  end;

  三、REF游標(biāo)

  在運(yùn)行時(shí)使用不同的語(yǔ)句與之關(guān)聯(lián)

  REF游標(biāo)使用游標(biāo)變量

  游標(biāo)變量

  一種引用類型

  可以在運(yùn)行時(shí)指向不同的存儲(chǔ)位置

  Close 語(yǔ)句關(guān)閉游標(biāo)并釋放用于查詢的資源

  游標(biāo)變量的類型

  具有約束的游標(biāo)變量

  具有返回類型的游標(biāo)變量、

  也稱為"強(qiáng)游標(biāo)"

  無(wú)約束的游標(biāo)變量

  沒(méi)有返回類型的游標(biāo)變量

  也稱為"弱游標(biāo)"

  declare

  type RefEmpcur is ref cursor return emp%ROWTYPE;

  Empcur RefEmpcur;

  Emprow emp%ROWTYPE;

  flag int := 0;

  begin

  flag := &flag;

  if flag=0 then

  OPEN Empcur for select * from emp where sal>500 and sal<1000;

  elsif flag=1 then

  OPEN Empcur for select * from emp where sal>=1000;

  else

  OPEN Empcur for select * from emp;

  end if;

  loop

  fetch Empcur into Emprow;

  DBMS_OUTPUT.PUT_LINE(Emprow.empno);

  exit when Empcur%NOTFOUND;

  end loop;

  close Empcur;

  end;

  游標(biāo)變量的限制

  不能在程序包中聲明游標(biāo)變量

  遠(yuǎn)程子程序不能接受游標(biāo)變量的值

  不能使用比較操作符對(duì)游標(biāo)變量進(jìn)行相等或不相等測(cè)試

  不能將空值賦予游標(biāo)變量

  表不能存儲(chǔ)游標(biāo)變量的值

關(guān)鍵詞標(biāo)簽:ORACLE,PLSQL游標(biāo)

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法