FORALL i IN INDICES OF 语法

  转自
http://blog.163.com/kele_lipeng/blog/static/81345278201372004112862/




FORALL i IN INDICES OF 语法大全  




当要在 Oracle 中之心批量 INSERT、UPDATE 和 DELETE 操作时,可以使用 FORALL 语句。




语法:




--语法1:   




FORALL 下标变量(只能当作下标被引用) IN 下限..上限   




  sql 语句;    --只允许一条 sql 语句   




--语法2:   




FORALL 下标变量 IN INDICES OF(跳过没有赋值的元素,例如被 DELETE 的元素,NULL 也算值) 集合   
 
  [BETWEEN 下限 AND 上限]   

  sql 语句;   

--语法3:   

FORALL 下标变量 IN VALUES OF 集合(把该集合中的值当作下标,且该集合值的类型只能是 PLS_INTEGER BINARY_INTEGER)   

  sql 语句; 

create table tb1(   
  id number(5),   
  name varchar2(50)   
);  

语法1演示:

--批量插入演示   
declare  
  type tb_table_type is table of tb1%rowtype   
    index by binary_integer;   
  tb_table tb_table_type;   
begin  
  for i in 1..10 loop   
    tb_table(i).id:=i;   
    tb_table(i).name:='NAME'||i;   
  end loop;   
  forall i in 1..tb_table.count  
    insert into tb1 values tb_table(i);   
end;   
  
  
--批量修改演示   
declare  
  type tb_table_type is table of tb1%rowtype   
  index by binary_integer;   
  tb_table tb_table_type;   
begin  
  for i in 1..10 loop   
    tb_table(i).id:=i;   
    tb_table(i).name:='NAMES'||i;   
  end loop;   
  forall i in 1..tb_table.count  
    update tb1 t set row = tb_table(i) where t.id = tb_table(i).id;   
end;   
  
  
--批量删除演示   
declare  
  type tb_table_type is table of tb1%rowtype   
  index by binary_integer;   
  tb_table tb_table_type;   
begin  
  for i in 1..10 loop   
    tb_table(i).id:=i;   
    tb_table(i).name:='NAMES'||i;   
  end loop;   
  forall i in 1..tb_table.count  
    delete tb1 where id = tb_table(i).id;   
end;  
语法2演示:




select * from tb1;   
declare  
  type demo_table_type is table of demo%rowtype   
    index by binary_integer;   
  demo_table demo_table_type;   
begin  
  for i in 1..10 loop   
    demo_table(i).id:=i;   
    demo_table(i).name:='NAME'||i;   
  end loop;   
  demo_table.delete(3);   
  demo_table.delete(6);   
  demo_table.delete(9);   
  forall i in indices of demo_table   
    insert into demo values demo_table(i);   
end;   
  
select * from demo;   
1   1   NAME1   
2   2   NAME2   
3   4   NAME4   
4   5   NAME5   
5   7   NAME7   
6   8   NAME8   
7   10  NAME10  
语法3演示:

declare  
  type index_poniter_type is table of pls_integer;   
  index_poniter index_poniter_type;   
  type demo_table_type is table of demo%rowtype   
    index by binary_integer;   
  demo_table demo_table_type;   
begin  
  index_poniter:=index_poniter_type(1,3,5,7);   
  for i in 1..10 loop   
    demo_table(i).id:=i;   
    demo_table(i).name:='NAME'||i;   
  end loop;   
  forall i in values of index_poniter   
    insert into demo values demo_table(i);   
end;   
  
  
select * from demo;   
1   1   NAME1   
2   3   NAME3   
3   5   NAME5   
4   7   NAME7  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值