`

oracle forall关键字进行批量操作

 
阅读更多
两个数据操纵语言(DML)语句:BULK COLLECT和FORALL。

这两个语句在PL/SQL内部进行一种数组处理BULK COLLECT提供对数据的高速检索,FORALL可大大改进INSERT、UPDATE和DELETE操作的性能。Oracle数据库使用这些语句大大减少了PL/SQL与SQL语句执行引擎的环境切换次数,从而使其性能有了显著提高。

例如:如果你要插入5000条数据,一般情况下,在pl/sql中用for循环,循环插入5000次,
而用forall一次就可以插入5000条,提高了性能和速度。

DECLARE
  --定义游标并插入数据
  CURSOR CUR_OBJECT_FORALL IS SELECT UUID FROM TEST;
  --定义forall对象数据 定义的是列对象 即UUID列
  TYPE T_OBJECT_FORALL IS TABLE OF CUR_OBJECT_FORALL%ROWTYPE INDEX BY BINARY_INTEGER;
  --定义forall实例
  T_OBJECT_FORALL1 T_OBJECT_FORALL;

BEGIN
  --打开游标
  OPEN CUR_OBJECT_FORALL;
  --把游标数据放入forall实例中
  FETCH CUR_OBJECT_FORALL BULK COLLECT INTO T_OBJECT_FORALL1;
  --关闭游标
  CLOSE CUR_OBJECT_FORALL;
  --循环遍历forall实例并批量插入数据库 
  FORALL I IN T_OBJECT_FORALL1.FIRST .. T_OBJECT_FORALL1.LAST
  
    INSERT INTO FORALLTEST VALUES T_OBJECT_FORALL1 (I);

  COMMIT;

END;


--测试表1
drop table test1;
create table test1(id number(10),name varchar2(10));
insert into test1 values(1,'aa');
insert into test1 values(2,'bb');
commit;

--测试表2
drop table test2;
create table test2(id number(10),name varchar2(10));

--test1
declare
  type dr_type is table of test1%ROWTYPE index by binary_integer;
  dr_table dr_type;
begin
  select id, name BULK COLLECT into dr_table from test1;
  FORALL i IN dr_table.first .. dr_table.last
    insert into test2 values dr_table (i);
  --error statement
  --1.insert into test2 values(dr_table(i));报没有足够的值错误,此处外面不可以加括号,当有多个字段的时候,单个字段可以加括号
  --2.insert into test2 values(dr_table(i).id,dr_table(i).name);集合的field不可以在forall中使用,必须是整体使用
  --3.insert into test2 values dr_table(i+1);错误,不可以对索引变量进行运算
  --4.insert into test2 values dr_table(i);dbms_output.put_line(i);不正确,找不到i,因为forall中只能使用单条语句可以引用索引变量
end;


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    oracle 批量

    4. **BULK COLLECT与FORALL**:Oracle提供了BULK COLLECT和FORALL两个关键字来优化批量处理。首先使用BULK COLLECT一次性收集多行,然后使用FORALL一次性删除这些行: ```sql DECLARE TYPE tbl_type IS TABLE OF...

    Oracle Bulk Binds技术分析.pdf

    输入绑定则使用`FORALL`关键字,它指示PL/SQL引擎在发送SQL语句给SQL引擎执行前先进行批量绑定。这样,对于一组操作,只需要一次上下文切换,提高了执行速度。例如: ```sql FORALL i IN index_range INSERT INTO ...

    mybatis foreach批量插入数据:Oracle与MySQL区别介绍

    在Oracle中,foreach标签的separator属性可以设置为“union all”,这样可以将每个元素之间用union all关键字连接起来,形成一个大的插入语句。例如: ```xml insert into table_name (name, adress, age) ...

    oracle性能

    `FORALL`与`BULK COLLECT`是PL/SQL中的两个关键字,它们一起用于在存储过程或函数中执行批量DML操作,如INSERT、UPDATE或DELETE。这种方式可以减少网络往返次数,大大提高执行效率。 2. **存储过程(Stored ...

    Oracle数据库实验操作

    ### Oracle数据库实验操作知识点 #### 第一部分:SQL基础 ##### 基本查询语句 - **实验1:** 编写一个简单的SQL查询语句,用于查询表中的所有行和所有列。例如: ```sql SELECT * FROM 表名; ``` - **实验2:**...

    Oracle初学者笔记

    `Forall`关键字用于批量绑定PL/SQL变量,一次性将多个值传递给SQL引擎,从而减少数据库调用次数。 最后,我们讨论成员函数和过程,这是抽象数据类型的一部分,类似于面向对象编程中的方法。在Oracle中,你可以为...

    oracle 10 学习资料.pptx

    `FORALL`关键字可以用于一次性对集合中的所有元素执行操作,而`BULK COLLECT`子句则用于在将结果集返回到PL/SQL之前进行批量绑定,这在处理查询结果时非常高效。 嵌套表是数据库中嵌套的表结构,可以直接使用SQL...

    ORACLE转DB2对照全解

    **注意:** Oracle和DB2都支持使用`DISTINCT`关键字来去除重复值。 #### 十八、Null值转换 **Oracle:** ```sql SELECT NVL(col, default_val) FROM table; ``` **DB2:** ```sql SELECT COALESCE(col, default_...

    Oracle知识之集合和成员函数.pptx

    `FORALL`关键字用于在执行DML语句前批量处理输入集合。`BULK COLLECT`子句则用于在从SQL引擎返回到PL/SQL引擎之前批量收集结果集,它可以用于`SELECT INTO`,`FETCH INTO`和`RETURNING INTO`子句。 嵌套表是Oracle...

    Oracle_SQL学习笔记.doc

    - PL/SQL中的`FORALL`语句支持批量绑定变量,如`FORALL i IN 1..x.COUNT DML`,但只能用于单条DML语句。 这些是Oracle SQL学习中的一些基础和进阶知识点,它们对于高效地管理Oracle数据库至关重要。理解并熟练掌握...

    ORACLE SQL编程技巧.doc

    使用BULK COLLECT INTO和FORALL语句来提升插入性能。 **二、SQL的使用** 1. **show和set命令**:在SQL*Plus中,show命令用于显示当前设置,set命令用于更改环境变量,如行宽度、日期格式等。 2. **sqlplus程序的...

    oracle入門訓練代碼

    - **注意**:如果需要匹配通配符本身,则需要使用`ESCAPE`关键字进行转义,例如:`WHERE spname LIKE 'sp\%%' ESCAPE '\'`。 ### 6. 排序 #### SQL语句: ```sql SELECT spname "shangpinmingcheng", spprice ...

    Oracle 学习笔记

    - `FORALL`循环可以用于批量插入、更新或删除数据。 ```sql FORALL i IN 1..x.COUNT INSERT INTO t (col1, col2) VALUES (x(i).col1, x(i).col2); ``` - 使用`SQL%BULK_ROWCOUNT`获取每条记录的影响行数。 6....

    PLSQL应用程序开发[收集].pdf

    - 使用BULK COLLECT和FORALL语句提高批量操作的性能。 8. **字符串处理**: - 字符串是PL/SQL中的重要数据类型,可以进行连接、截取、替换、查找等操作。 - 特别是内置的DBMS_LOB包提供了对大型对象(LOBs)如...

    PL-SQL用户指南与参考(译)

    PL/SQL支持批量处理,通过诸如游标FOR循环和FORALL语句等机制,可以高效地处理大量数据。 **5、可移植性** PL/SQL代码可以在任何安装了Oracle数据库的平台上运行,具有良好的可移植性。 **6、与SQL紧密结合** PL...

    泛微Ecology E9适配人大金仓数据库说明_v3.docx

    * 金仓数据库不支持批量插入insert all语法,解决办法:涉及insert all的内容全部兼容到非oracle数据库的处理逻辑分支下。 * 金仓数据库不支持table()关键字,解决办法:改为执行Mysql数据库类型的处理逻辑,相关...

    PLSQL最佳实践

    PL/SQL是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据操作能力和传统过程化语言的控制结构,使得开发人员能够编写复杂的应用程序并有效地与数据库交互。本文档将详细介绍一系列关于PL/SQL的最佳实践...

    PLSQL高级编程资料

    FORALL i IN 1..emps.COUNT INSERT INTO employee (emp_id, ename) VALUES (emps(i).emp_id, emps(i).ename); COMMIT; END; ``` #### 1.5 集合的异常处理 在处理集合时,可能会遇到各种异常情况,例如索引超出...

Global site tag (gtag.js) - Google Analytics