26.PLSQL中使用forall和bulk collect批量操作数据库

        假设有以下数据表emp:


一、使用forall批量修改数据库

       如果有以下需求:要求修改EMPNO为7499、7566、和7654的成员的sal值为5000,如果我们在Plsql中使用for循环,如下:
declare
 type empno_varray is varray(8) of emp.empno%type;
 v_empno empno_varray :=empno_varray(7499,7566,7654);
begin
 for x in v_empno.first..v_empno.last loop
    update emp set sal=5000 where empno=v_empno(x);
 end loop;
end;
/
       显然,上面的代码执行了三次数据库更新操作,使用foral是for一种特殊的用法,l可以只用一次数据库操作批量地更新数据:
declare
 type empno_varray is varray(8) of emp.empno%type;
 v_empno empno_varray :=empno_varray(7499,7566,7654);
begin
 forall x in v_empno.first..v_empno.last 
    update emp set sal=5000 where empno=v_empno(x);
end;
/
       从上面forall的语法上也可以看出来,forall中并没有loop和endloop关键字,所以它并不是循环写入数据库,而是一次性写入,相当于执行下面的sql语句:
update emp set sal=5000 where empno in(7499,7566,7654);
        执行的结果如下:


二、使用bulk collect 批量接收数据

       假设有下面的需求,打印输出sal大于2000的所有雇员的姓名。之前使用的select...into 变量..语句只能向变量中插入一个数据,借助bulk collect我们可以实现批量的插入数据。
     

declare
  type ename_varray is varray(20) of emp.ename%type;
  v_ename ename_varray :=ename_varray();
begin 
  select ename bulk collect into v_ename from emp where sal>2000;
  for x in v_ename.first..v_ename.last loop
    dbms_output.put_line(v_ename(x));
  end loop;
end;
/

        结果如下:




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值