当前位置:首页 > 开发 > 数据库 > 正文

Oracle 中的 FORALL 语句

发表于: 2012-04-13   作者:as619864232   来源:转载   浏览次数:
摘要: 当要在 Oracle 中之心批量 INSERT、UPDATE 和 DELETE 操作时,可以使用 FORALL 语句。   语法:   --语法1: FORALL 下标变量(只能当作下标被引用) IN 下限..上限 sql 语句; --只允许一条 sql 语句 --语法2: FORALL 下标变量 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
 

Oracle 中的 FORALL 语句

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在oracle 8i或更高版本的forall语句中,oracle提供了非常有意义的dml增强特性。Forall告诉PL/SQL运
在oracle 8i或更高版本的forall语句中,oracle提供了非常有意义的dml增强特性。Forall告诉PL/SQL运
在oracle 8i或更高版本的forall语句中,oracle提供了非常有意义的dml增强特性。Forall告诉PL/SQL运
Oracle中的DDL语句 一、表格(table) 1.创建 创建语句创建 create table t_1( id int primary key, n
Oracle为我们设置了一个非常好的参考,那就是scott用户和其中的员工表。今天就从emp表入手,共同研
6.1 SQL语句类别 DDL:数据定义语言语句。这样的语句有CREATE、TRUNCATE和ALTER,它们用于建立数据
----------------------------------------------------------------------------- 导入语法 imp us
创建表空间 CREATE TABLESPACE mydb DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\mydb ' SIZE
基于oracle数据库中自带的scott表emp 一、最基本用法 1、列出表中的所有字段及每个字段对应的值 inse
供应商评价管理系统中要对供应商的品质等级进行划分,规则如下: 根据供应商的综合得出其品质等级。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号