`

oracle的批量处理操作梳理

阅读更多

Bulk Collect批量查询及FORALL批量维护(insert update delete)知识梳理
大批量数据操作时可以显著提高执行效率。

采用bulk collect可以将查询结果一次性地加载到collections中,而不是通过cursor一条一条地处理。---同时注意内存空间limit 256;-------  

在select into语句中使用bulk collect
在fetch into中使用bulk collect
在returning into中使用bulk collect

returning into语句的主要作用是:
delete操作:returning返回的是deleter之前的结果
insert操作:returning返回的是insert之后的结果
update操作:returning语句是返回update之后的结果
注意:
returning into语句不支持insert into select 语句和merge语句

forall指的是同时插入,如果使用for循环也可以插入三条记录,但默认returing只显示最后一条

DECLARE
    TYPE t_desc_tab IS TABLE OF t1.description%TYPE;//字段类型
    TYPE t_tab IS TABLE OF t1%ROWTYPE;//行类型  处理结果集
   
    /*
    TYPE enum_t IS TABLE OF employees.employee_id%TYPE; 
   TYPE dept_t IS TABLE OF employees.department_id%TYPE; 
    e_ids enum_t; 
    d_ids dept_t; 
    */
   
    l_desc_tab t_desc_tab := t_desc_tab('FIVE', 'SIX', 'SEVEN');//变量定义 进行类型数组的初始化
    l_tab t_tab;//变量定义
BEGIN
  //数组集合的遍历
    FORALL  i IN l_desc_tab.first .. l_desc_tab.last
    INSERT INTO t1
    VALUES (t1_seq.nextval, l_desc_tab(i))
   
    RETURNING id, description BULK COLLECT INTO l_tab;--以行为单位进行填充
    --RETURNING id, description BULK COLLECT INTO e_ids,d_ids;--以列为单位,进行填充
 
    FOR i IN l_tab.first .. l_tab.last LOOP
    DBMS_OUTPUT.put_line('INSERT ID=' || l_tab(i).id || ' DESC=' || l_tab(i).description);
    END LOOP;
    COMMIT;
END;

如果更新dml操作影响多条记录可以通过bulk collect into 来提取
使用%BULK_ROWCOUNT返回受影响的记录行数
CREATE TABLE emp_temp AS SELECT * FROM employees; 
DECLARE
   TYPE NumList IS TABLE OF NUMBER; 
   depts NumList := NumList(30, 50, 60); 
BEGIN
   FORALL j IN depts.FIRST..depts.LAST
      DELETE FROM emp_temp WHERE department_id = depts(j); 
-- How many rows were affected by each DELETE statement? 
   FOR i IN depts.FIRST..depts.LAST
   LOOP 
      DBMS_OUTPUT.PUT_LINE('Iteration #' || i || ' deleted ' || 
         SQL%BULK_ROWCOUNT(i) || ' rows.'); 
   END LOOP; 
END; 


--自定义record 
TYPE  my_record  IS RECORD (  
   name varchar2(25), 
   mobile varchar2(20), 
   email  varchar2(50) 
  ); 
type my_type is table of my_record; --定义一个数组类型,相当于java中的List 
my_data_set my_type ; --声明我的个性化定义的数据类型。 


集合方法
EXISTS(N)
如果第n个元素存在,返回TRUE

COUNT
该函数集合元素的数目

DELETE
DELETE(n)
DELETE(n,m)
删除集合元素
l         删除所有元素
l         删除第n个元素
l         删除n到m的元素

FIRST
返回集合第一个(最小的)元素索引号,如果集合为空,返回NULL

LAST
返回集合中最后一个(最大的)元素索引号,如果集合为空,返回NULL

NEXT(n)
返回集合当前元素的下n元素的索引号,如果它不存在就返回NULL

PRIOR(n)
返回集合当前元素的前n元素的索引号,如果它不存在就返回NULL

LIMIT
返回varray中创建元素的最大个数


EXTEND
EXTEND(n)
EXTEND(n,m)
增加集合的大小。
l         添加一个,设为空
l         添加n个,设为空
l         添加n个,设为m

TRIM
TRIM(n)
从集合末尾处删除元素
l         删除一个
l         删除n个


--语法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 语句; 

分享到:
评论

相关推荐

    Oracle 笔记.docx

    ### Oracle 笔记知识点梳理 #### 一、数据库基础 - **数据的储存方法**: - 大脑记忆:适合少量数据,不适用于长期存储。 - 纸质记录:传统方式,不方便检索和更新。 - 计算机内存:适合临时存储,断电后数据...

    oracle最全学习笔记(个人总结)

    ### Oracle 最全学习笔记知识点梳理 #### 一、存储过程 - **定义**:存储过程是一种在数据库中存储复杂程序以便外部程序调用的一种数据库对象。 - **应用场景**:主要用于执行大量的更新或插入操作,以提高数据库...

    oracle大数据产品最新架构方案

    Oracle大数据平台提供了数据实时复制、流数据处理、批量加工、数据挖掘、大数据地图与图形处理、大数据一体机、NoSQL数据库、数据可视化、商业智能、批处理流处理等系列产品。 #### 关键产品: - **GoldenGate for...

    ORACLE_OCP10g学习笔记.pdf

    ### ORACLE_OCP10g学习笔记知识点梳理 #### 一、Oracle简介及OCP认证背景 - **Oracle**:源自中国殷墟出土的甲骨文(oracle bone inscriptions),在英语中有“神谕”之意。Oracle公司是全球领先的信息管理软件开发...

    超级详细Oracle教程 java

    ### Oracle数据库教程精要知识点梳理 #### 一、引言 - **背景介绍**:本文档是一份关于Oracle数据库的详尽教程,旨在为学习者提供一个全面且深入的学习资源。文档涵盖了从基础概念到高级功能的一系列内容,适合...

    Oracle课程目录

    - **系统要求**:详细介绍安装Oracle所需的硬件和软件环境,包括操作系统版本、内存大小、磁盘空间等。 - **安装步骤**:提供详细的安装指导,包括下载安装包、设置环境变量、配置监听器等。 - **常见问题解决**:...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    操作系统 linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴Java开发规范手册 UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS ...

    大数据学习路线+知识点大梳理.pdf

    ### 大数据学习路线与知识点梳理 #### 一、数据存储技术概览 **1. 关系型数据库** - **MySQL** - **特点**: 开源、稳定、易用。 - **应用场景**: 适用于中小型企业的业务应用。 - **SQL Server** - **特点**: ...

    arcmap vba将polyline格式的文件的所有节点导入到数据库

    - **批量处理**:为了提高性能,每处理100条记录后进行一次提交操作。 ### 五、注意事项 - **性能优化**:考虑到节点数量可能非常大,在实际应用中可能需要考虑性能优化措施,例如增加批处理的数量或采用更高效的...

    PL-SQL教程(私塾在线)视频配套学习资料

    - **数据处理**:批量更新或查询数据。 - **业务逻辑实现**:通过存储过程实现复杂的业务逻辑。 - **安全性管理**:利用存储过程限制对敏感数据的访问。 - **性能优化**:减少网络传输量,提高应用程序的整体性能。 ...

    高中信息技术 7.3利用数据库管理大量信息知识梳理及达标练习 教科版

    【知识点梳理】 1. 数据库的优势: 数据库是高效管理大量信息的关键工具,它可以方便地收集、加工、存储和管理信息。通过数据库,可以实现数据的高效检索,支持多用户和多应用共享,避免数据冗余,节省存储空间,...

    MySql数据库开发的36条军规

    6. SQL优化:在处理大规模数据时,如大数据量的插入(大事务)或批量操作,良好的SQL写法和执行计划的优化是确保数据库性能的关键。 7. 典型的WEB2.0网站架构:WEB2.0网站通常面对高并发请求,理解其架构对于优化...

    ODI知识模块开发(KM)手册 英文

    首先,ODI(Oracle Data Integrator)是Oracle公司所提供的一款数据集成工具,用于高效整合和管理数据,支持实时数据集成、批量数据处理和数据质量检查等复杂的数据集成场景。KM(Knowledge Module,知识模块)是ODI...

    sql优化指南.pdf

    - **批量操作**: 一次处理多个记录以提高效率。 #### 八、常见的SQL错误写法 - **SELECT ***: 不指定字段列表可能导致不必要的数据加载。 - **使用非标准化函数**: 非标准化函数在不同数据库系统间可能不兼容。 - *...

    PL_SQL Developer 7.0指南(中文)

    ### PL/SQL Developer 7.0指南知识点梳理 #### 一、引言 - **PL/SQL Developer**:是一款专为Oracle数据库设计的强大集成开发环境(IDE),它提供了丰富的功能来帮助开发者高效地进行PL/SQL语言编程。 - **版本**...

    C#学习笔记

    ### C#学习笔记知识点梳理 #### 一、基础篇知识点详解 **1. 重写ToString()方法** 在C#中,每个类都继承自`object`类,而`object`类有一个`ToString()`方法,它返回对象的类型名称。当我们需要对一个对象进行更加...

    数据库课程设计报告-社区人口管理系统报告.doc

    在人口管理系统中,可能涉及多条记录的批量更新或删除操作,这就需要系统具备可靠的事务处理机制,确保即使在操作过程中出现故障,也不会导致数据损坏或丢失。 ##### 4.2 系统需求说明 - **软件环境**:报告中虽然...

    一体化的数据治理和共享平台建设方案.pptx

    - **数据源层:**负责从各数据源实时或批量采集数据,支持多种数据源类型和数据格式。 - **数据处理层:**提供数据清洗、转换、聚合等功能,确保数据质量和满足业务需求。 - **数据服务层:**为上层应用提供数据服务...

Global site tag (gtag.js) - Google Analytics