`
as619864232
  • 浏览: 324226 次
社区版块
存档分类
最新评论

Oracle 中的 FORALL 语句

阅读更多

当要在 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 10g中用FORALL处理非连续数组

    Oracle 10g 中的 FORALL 语句可以处理非连续数组,这种能力在以前的版本中是不存在的。在 Oracle 10g 中,FORALL 语句可以使用 INDICES OF 和 VALUES OF 子句来处理非连续数组。下面我们将详细介绍这两个子句的语法...

    自动生成oracle数据库表分析语句

    3. **执行生成的语句**:生成的SQL语句可以直接复制并在Oracle环境中执行,或者将其保存到一个文件中批量执行。 #### 注意事项 - 在执行`ANALYZE TABLE`命令时,可能会消耗大量资源,特别是在大型表上。因此,在...

    ORACLE_UPDATE_语句语法与性能分析

    - **批量操作**:如果可能,考虑批量更新,如使用BULK COLLECT INTO和FORALL操作。 - **物化视图**:对于频繁更新的部分数据,创建物化视图可以提高查询效率。 总之,Oracle UPDATE语句的语法和性能取决于许多因素...

    Oracle性能监控SQL语句

    ### Oracle性能监控SQL语句详解 #### 一、分析表 **知识点:** - **Table Analysis:** - 使用`ANALYZE TABLE`命令来收集表及其索引的统计信息,这对于优化器做出正确的执行计划决策至关重要。 - `ANALYZE ...

    forall 用法小结

    在SQL语句中,为PL/SQL变量赋值的过程被称为绑定,而`FORALL`语句则能够将集合的所有元素一次性传递给一个操作,这一过程即为批量绑定。 例如,如果集合包含20个元素,使用批量绑定可以通过单次操作等同于执行20次...

    for all 用法小结

    1. **带 INSERT、UPDATE 和 DELETE 语句的批挷定**:在 `FORALL` 语句中嵌入 SQL 语句。 2. **带 SELECT 语句的批挷定**:在 SELECT 语句中使用 `BULK COLLECT` 语句代替 `INTO`。 #### 四、批挷定示例 下面是一个...

    oracle 查询语句实例

    Oracle查询语句是数据库管理中不可或缺的部分,尤其在处理复杂数据检索时显得尤为重要。Oracle SQL是一种结构化查询语言,用于与Oracle数据库进行交互。在这个"oracle查询语句实例"的压缩包中,你将找到一系列实用的...

    oracle常用语句大全

    Oracle 常用语句大全 Oracle 是一款流行的关系数据库管理系统,广泛应用于企业级的数据存储和管理。作为一个dba或开发者,掌握 Oracle 的常用语句是非常必要的。本文汇总了 Oracle 的一些常用语句,包括数据库的...

    update语句的优化-oracle

    对于大量相似的更新操作,可以考虑使用BULK COLLECT和FORALL语句进行批量处理,以减少网络和数据库调用的开销: ```sql DECLARE TYPE col_table IS TABLE OF table_name.column_name%TYPE INDEX BY PLS_INTEGER; ...

    sql for oracle db 常用语句

    以下是一些Oracle DB中常用的SQL语句,它们涵盖了数据库的基本管理、监控和查询功能。 1. **查看表空间的名称及大小**: 这个查询帮助我们了解各个表空间的总大小。`dba_tablespaces` 和 `dba_data_files` 是系统...

    oracle SQL 语句插入数据

    在Oracle中,插入数据到表中的主要语句是`INSERT INTO`,它允许你将新记录添加到已存在的表中。下面我们将深入探讨Oracle SQL语句插入数据的相关知识点。 一、基本语法 Oracle SQL 插入数据的基本语法如下: ```...

    使用toad导出oracle数据库某个或多个表中的数据[整理].pdf

    首先,我们需要登录 Toad for Oracle,并打开 Schema 窗口。在 Schema 窗口中,我们可以看到数据库中的所有表的列表。在这里,我们可以右键点击欲导出数据的表,并选择 "Export data"。 在 Data Export 窗口中,...

    java_for_oracle.rar_for oracle_oracle

    比如,利用缓存减少重复的类加载,以及使用BULK COLLECT和FORALL语句进行批量处理。 7. **文件"java_for_oracle.doc"** 这个文档很可能包含详细的步骤指导,如何在Oracle环境中配置和使用Java进行存储过程开发,...

    Sql Server与Oracle的区别

    - **UNION运算符**:Oracle允许在SELECT语句中使用UNION运算符,而Sql Server则提供了更丰富的选项,如COMPUTE子句和FOR BROWSE选项。 - **优化策略**:Oracle的基于开销的优化提示在Sql Server中可能不适用,建议...

    oracle通过1条语句插入多个值的方法示例

    `INSERT ALL`语句允许你在单个语句中插入多行数据到一个或多个表中。例如,如果你有一个`pm_stu`表,需要插入多条记录,你可以这样编写SQL: ```sql insert all into pm_stu (stu_id, stu_name) values ('3', '...

    Oracle的表结构转成Mysql的表结构

    本文介绍了一种将Oracle数据库中的表结构转换为MySQL数据库表结构的方法。通过编写一个PL/SQL函数`fnc_table_to_mysql`来实现这一目标。该函数可以接受四个参数,并生成对应的MySQL创建表语句(DDL)。 #### 参数...

    Oracle中树的操作

    4. **插入新节点**:最后,使用`FORALL`语句批量插入新的节点到`SCOTT_TREE`表中。 下面是具体的PL/SQL过程代码: ```plsql CREATE OR REPLACE PROCEDURE COPY_TREE AS TYPE LOOKUP IS TABLE OF VARCHAR2(32) ...

    oracle service_name参数

    在Oracle数据库管理中,`service_name`是一个重要的参数,它用于标识数据库实例所提供的服务名称。通过设置正确的`service_name`,可以确保客户端应用程序能够顺利连接到所需的数据库实例。本文将详细介绍`service_...

    oracle执行动态sql

    3. **动态生成的字段列表**:根据业务需求,可能需要动态地构建 SELECT 语句中列出的字段。 #### 二、使用 EXECUTE IMMEDIATE 在 Oracle 中,`EXECUTE IMMEDIATE` 是一种常用的执行动态 SQL 的方式。下面通过几个...

    SQL Optimizer for Oracle - Basic.ppt

    《SQL Optimizer for Oracle - Basic》的培训课程主要讲解了如何高效优化Oracle数据库中的SQL语句,提升系统性能。课程涵盖了四个核心步骤、两种执行模式以及开发和优化流程。 首先,四个核心步骤是识别、优化、...

Global site tag (gtag.js) - Google Analytics