`

Oracle_学习开发子程序_复合数据类型三(批量绑定)

阅读更多
   批量绑定是oracle9i新增加特性,是指执行单次SQL操作能传递所有集合元素的数据,通过批量绑定可以极大的加快数据处理速度,提高应用程序的性能,批量绑定是使用bulk collect子句和forall语法完成,其他bulk  collect子句用于取得批量数据,该子句只能用于select语句、fetch语句和DML返回子句,而forall语句只适用于批发批量的DML操作。
一、forall语句
当要在PL/SQL应用程序中执行批量insert、update、delete操作时,可以使用forall语句,在oracle9i之前,当使用forall语句时,必须具有连续的元素,而从oracle9i开始,通过使用新增的indices of子句和values of子句,可以使用不连续的集合元素,注意for语句是循环语句,而forall可不是循环语句,从oracle10g开始,forall语句有是三种执行方法,如下所示;
1、语法一:
   forall  index  in lower_bound..upper_bound
       sql_statement;
如上所示:index是隐含定义的整数变量(将作为集合元素下标被引用);lower_bound和upper_bound分别是集合元素的上、下界。
2、语法二:
   forall index in indies of collection
     [between lower_bound and upper_bound]
如上所示:indices of子句用于指定只取得对应中的collection集合元素下标的index值。
3、语法三:
forall index in values of index_collection
    sql_statement;
如上所示:其中values of子句用于指定index值从集合变量index_collection中取得,注意Oracle9i只能使用第一种方法,以下通过示例说明:
(1)、在insert语句上使用批量绑定
   当使用批量绑定为数据库表插入数据时,首先需要给集合元素赋值,然后使用forall语句执行批量绑定插入操作,示例如下:
declare
type id_table_type is  table of number(6)
index by binary_integer; 
type name_table_type is  table of varchar2(10)
index by binary_integer;
id_table id_table_type;
name_table name_table_type;
begin
for i in 1..10 loop
id_table(i):=i;
name_table(i):='name'||to_char(i);
end loop;
forall i in 1..id_table.count
insert into demo values(id_table(i),name_table(i));
end;

(2)、在update语句上使用批量绑定
   当使用批量绑定为更新数据时,首先需要给集合元素赋值,然后使用forall语句执行批量绑定修改操作,示例如下:
declare
 type id_table_type is table of number(6) index by binary_integer;
 type name_table_type is table of varchar2(10) index by binary_integer;
 id_table id_table_type;
 name_table name_table_type;
begin
for i in 1..10 loop
id_table(i):=i;
name_table(i):='yanglin'|| to_char(i);
end loop;
forall i in 1..id_table.count
update demo set name=name_table(i) where id=id_table(i);
end;

(3)、在delete语句上使用批量绑定
   当使用批量绑定删除数据时,首先需要给集合元素赋值,然后使用forall语句执行批量绑定删除操作,示例如下:
declare
 type id_table_type is table of number(6) index by binary_integer;
 id_table id_table_type;
begin
for i in 1..10 loop
id_table(i):=i;
end loop;
forall i in 1..id_table.count
delete from  demo where id=id_table(i);
end;

(4)、在forall语句上使用部分集合元素
   当使用forall语句进行批量操作时,即可以使用集合的所有元素,也可以使用集合的部分元素,示例如下:
declare
 type id_table_type is table of number(6) index by binary_integer;
 id_table id_table_type;
begin
for i in 11..20 loop
id_table(i):=i;
end loop;
forall i in 15..20
delete from  demo where id=id_table(i);
end;

(4)、在forall语句上使用indices of子句
   indices of子句是oracle10g新增加的特征,该子句用于跳转null集合元素,示例如下:
declare
 type id_table_type is table of number(6);
 id_table id_table_type;
begin
id_table:=id_table_type(11,null,12,null,13,null);
forall i in indices of id_table
delete from  demo where id=id_table(i);
end;

二、bulk collect子句
bulk collect用于取得批量数据,它只适用于select into语句、fetch into语句和DML返回子句,通过使用该子句可以将批量数据存放到PL/SQL集合变量中,其语法如下:
... bulk collect into collection_name[,collection_name].....
如上所示:collection_name用于指定集合变量名
1、在select into语句使用bulk collect语句,示例如下:
declare
 type temp_table_type is table of cip_temps%rowtype index by binary_integer;
 temp_table temp_table_type;
begin
select * bulk collect into temp_table from cip_temps where id=10;
for i in 1..temp_table.count loop
dbms_output.put_line(temp_table(i).name ||':'|| temp_table(i).address||':'||temp_table(i).age);
end loop;
end;

2、在DML返回子句中使用bulk collect语句,示例如下:
   执行DML操作时会改变数据库数据,为了取得DML操作所改变的数据,可以使用returning子句,为了取得DML所作用的多行数据,需要使用bulk collect子句,示例如下:
declare
 type temp_table_type is table of cip_temps%rowtype index by binary_integer;
 temp_table temp_table_type;
begin
delete from cip_temps where id=1
returning name,age,address,id bulk collect into temp_table;
dbms_output.put_line('信息'|| temp_table.count);
for i in 1..temp_table.count loop
dbms_output.put_line(temp_table(i).name ||':'|| temp_table(i).age||':'||temp_table(i).address||':'||temp_table(i).id);
end loop;
end;

3、fetch into语句将在后续讲解
分享到:
评论

相关推荐

    精通Oracle.10g.PLSQL编程

    使用复合数据类型 8.1 PL/SQL记录 8.1.1 定义PL/SQL记录 8.1.2 使用PL/SQL记录 8.2 PL/SQL集合 8.2.1 索引表 8.2.2 嵌套表 8.2.3 变长数组(VARRAY) 8.2.4 PL/SQL记录表...

    Oracle9i 数据库性能优化

    - **并行度设置**:适当增加并行度可以有效提高数据加载和批量处理的速度。 ##### 2.3 SQL 语句优化 - **避免全表扫描**:通过建立合适的索引来减少数据访问量。 - **减少排序操作**:尽可能使用索引而不是排序来...

    Oracle存储过程

    Oracle存储过程是数据库管理系统Oracle中的一种重要特性,它允许开发人员创建和执行预先编写好的PL/SQL代码块。这些代码块通常包含复杂的业务逻辑,能够提高数据库操作的效率和安全性。存储过程在Oracle中的应用广泛...

    oracle技巧部分

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储、管理和处理方面具有卓越性能。...通过学习这些内容,开发者可以更好地掌握Oracle数据库的高效使用,提升应用程序的性能和稳定性。

    PLSQL笔记(EFRIOO&GUOH)1.doc

    根据给定的信息,本文将对《PLSQL笔记(EFRIOO&GUOH)1.doc》中的主要内容进行详细解析,涵盖数据库检索、数据操纵、事务控制、控制结构、复合数据类型等多个方面。 ### 一、检索单行数据 #### 1.1 使用标量变量接受...

    Oracle SQL优化规则.zip

    Oracle SQL优化是数据库管理中的关键环节,尤其是在大型企业级应用中,高效的SQL查询能显著提升系统性能,降低服务器资源消耗。以下是一些重要的Oracle SQL优化规则: 1. **选择合适的索引策略**:索引是提升查询...

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

    `%ROWTYPE`用于定义与表或视图中的行相对应的复合数据类型,便于处理记录。 **5、声明的约束** 可以通过`CHECK`约束为变量定义范围或条件,确保其值符合预期的要求。 ##### 四、PL/SQL命名规范 PL/SQL建议采用有...

    PLSQL笔记整理

    #### 复合数据类型 - **PL/SQL记录**: - 定义记录类型并实例化记录变量。 - 在`SELECT INTO`、`INSERT`、`UPDATE`、`DELETE`语句中使用记录成员。 - **PL/SQL集合**: - **索引表**(INDEXED TABLE):类似于...

Global site tag (gtag.js) - Google Analytics