视窗
loading...
您现在的位置:首页 > IT认证 > oracle认证 >

ORACLEPLSQL游标学习


游标

  游标是指向上下文区域的句柄或指针

  上下文区域--用于SQL处理的内存区

  上下文区域的内容

  语句处理的行数

  指向语句的语法分析表示的指针

  游标的类型

  1、静态游标

  隐式游标

  显示游标

  2、REF游标(动态游标)

  一、隐式游标

  有ORACLE在内部声明

  用于处理

  DML语句

  返回单行的查询

  游标属性:

  1、%NOTFOUND 对数据操作成功返回FALSE,否则返回TRUE

  2、%FOUND  对数据操作成功返回TRUE,否则返回FALSE

  3、%ROWCOUNT  游标影响的行数

  4、%ISOPEN   游标是否打开

  begin

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

  DBMS_OUTPUT.PUT_LINE('游标所影响的行数:'||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;

  输出结果为:

  游标所影响的行数:1

  NOTFOUND为假

  FOUND为真

  ISOPEN为假

  declare

  icount int :=0;

  begin

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

  if SQL%NOTFOUND then

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

  else

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

  end if;

  commit;

  end;

  输出结果为:

  插入成功

  declare

  icount int :=0;

  begin

  update cities set country='aaaa';

  if SQL%NOTFOUND then

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

  else

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

  end if;

  commit;

  end;

  输出结果为:

  更新成功

  二、显式游标

  由用户显式声明

  游标将指向活动集中的当前行

  控制显示游标

  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;

  输出结果

  7369  SMITH

  loop循环

  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;while循环

  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;

  输出结果

  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循环

  循环游标

  显式游标的替代方法

  它的工作原理是什么:

  隐式打开游标

  自动从活动集获取行

  在处理完所有行时关闭游标

  优点:

  简化代码的编写

  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游标

  在运行时使用不同的语句与之关联

  REF游标使用游标变量

  游标变量

  一种引用类型

  可以在运行时指向不同的存储位置

  Close 语句关闭游标并释放用于查询的资源

  游标变量的类型

  具有约束的游标变量

  具有返回类型的游标变量、

  也称为“强游标”

  无约束的游标变量

  没有返回类型的游标变量

  也称为“弱游标”

  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;

  游标变量的限制

  不能在程序包中声明游标变量

  远程子程序不能接受游标变量的值

  不能使用比较操作符对游标变量进行相等或不相等测试

  不能将空值赋予游标变量

  表不能存储游标变量的值

閵嗏偓

閵嗏偓

閵嗘劕鍘ょ拹锝咃紣閺勫骸鎷伴悧鍫熸綀鐠囧瓨妲戦妴锟�
閺堫剛鐝柈銊ュ瀻娣団剝浼呴弶銉︾爱娴滃簼绨伴懕鏃傜秹閿涳拷鐎电娴嗘潪鐣屾畱娣団剝浼呴幋鎴滄粦閸旀稒鐪伴弽鍥ㄦ娣団剝浼呴惃鍕毉婢跺嫸绱�閹存垳婊戠亸濠囧櫢娴f粏鈧懐娈戦悧鍫熸綀閽佹ぞ缍旈弶鍐跨礉鐎佃鍨滄禒顒冩祮鏉炵晫娈戞穱鈩冧紖婵″倹婀佸鍌濐唴閹存牗婀佹笟鍨綀閹存牞绻氬▔鏇氫繆閹垵顕崣濠冩閼辨梻閮撮幋鎴滄粦閿涘本婀扮粩娆庣窗缁斿宓嗛崚鐘绘珟閿涳拷鐎电懓甯崚娑樺敶鐎硅鍨滄禒顒佸姽閹板繑鏁禒姗€鈧倸缍嬮惃鍕归柊顒婄礉閼辨梻閮撮弬鐟扮础閿涙岸鍋栨禒锟�:webmaster@jscj.com閵嗏偓閻絻鐦介敍锟�4008816886

相关文章

无相关信息
更新时间2022-03-13 11:05:03【至顶部↑】
联系我们 | 邮件: webmaster@jscj.com | 客服热线电话:4008816886(QQ同号) |  濞h濮炵€广垺婀囧顔讳繆

付款方式留言簿投诉中心网站纠错二维码手机版

客服电话: