orcale 游标

oracle for loop循环以及游标循环

1. for in loop形式

  DECLARE
     CURSOR c_sal IS SELECT employee_id, first_name || last_name ename, salary
     FROM employees ;
  BEGIN
     --隐含打开游标
     FOR v_sal IN c_sal LOOP
     --隐含执行一个FETCH语句
        DBMS_OUTPUT.PUT_LINE(to_char(v_sal.employee_id)||'---'|| v_sal.ename||'---'||to_char(v_sal.salary)) ;
     --隐含监测c_sal%NOTFOUND
     END LOOP;
  --隐含关闭游标
  END;

2.普通的游标循环

  declare

  --定义游标并且赋值(is 不能和cursor分开使用)

  cursor stus_cur is select * from students;

  --定义rowtype

  cur_stu students%rowtype;

  /*开始执行*/

  begin

  --开启游标

  open stus_cur;

   --loop循环

   loop

   --循环条件

   exit when stus_cur%notfound;

   --游标值赋值到rowtype

   fetch stus_cur into cur_stu;

   --输出

   dbms_output.put_line(cur_stu.name);

   --结束循环

   end loop;

  --关闭游标

  close stus_cur;

  /*结束执行*/

 end;

3.高效的游标循环

  declare

  cursor myemp_cur

  is select * from myemp;

  type myemp_tab is table of myemp%rowtype;

  myemp_rd myemp_tab;

  begin

   open myemp_cur;

   loop

   fetch myemp_cur bulk collect into myemp_rd limit 20;

   for i in 1..myemp_rd.count loop

    dbms_output.put_line('姓名:'||myemp_rd(i).ename);

   end loop;

   exit when myemp_cur%notfound;

   end loop;

  end;

 

BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、
FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT.

BULK COLLECT的限制
1、不能对使用字符串类型作键的关联数组使用BULK COLLECT 子句。
2、只能在服务器端的程序中使用BULK COLLECT,如果在客户端使用,就会产生一个不支持这个特性的错误。
3、BULK COLLECT INTO 的目标对象必须是集合类型。
4、复合目标(如对象类型)不能在RETURNING INTO 子句中使用。
5、如果有多个隐式的数据类型转换的情况存在,多重复合目标就不能在BULK COLLECT INTO 子句中使用。
6、如果有一个隐式的数据类型转换,复合目标的集合(如对象类型集合)就不能用于BULK COLLECTINTO 子句中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值