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/6/28來(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)化代碼的編寫(xiě)

  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)論

熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類型-oracle修oracle中使用SQL語(yǔ)句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限Oracle對(duì)user的訪問(wèn)控制Oracle對(duì)user的訪問(wèn)控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限