- 浏览: 275787 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
yh008:
不错的工具类。 版面需要调整下,有些内容看不到了,只能复制粘贴 ...
Spring 优秀工具类盘点,第 1 部分: 文件资源操作二 -
手心的水滴:
function Foo() { (function( ...
js 两个小括号 ()() 的用法 -
showthesunli:
博主说了这么多,我来说说我的想法,不晓得对不对总结一下,如下代 ...
js 两个小括号 ()() 的用法 -
aqbzwxd:
就是这种盲目无原理依据的研究测试弄晕了我, 有必要这么做吗? ...
js 两个小括号 ()() 的用法 -
wst0350:
多谢
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;
发表评论
-
oracle 异常处理
2010-06-02 19:01 18531、异常的优点 如果没有异常,在程序中,应当检查每个 ... -
oracle 行触发与语句触发
2010-05-25 12:49 1067oracle 行触发与语句触发的区别 1、行触发器有 f ... -
oracle 系统表
2010-05-21 12:28 821数据字典dict总是属于Oracle用户sys的。 1、 ... -
EXECUTE IMMEDIATE 执行sql语句
2010-05-21 10:54 3278在ORACLE的PL/SQL里:EXECUTE IMMEDIA ... -
Oracle正则表达式
2010-05-20 16:26 1337oracle的正则表达式(regular expression ... -
oracle 数组
2010-05-20 16:18 1101--固定数组 declare type type_ar ... -
Oracle 存储过程传入二维数组
2010-05-20 15:58 3660Oracle 存储过程传入二维数组 使用Ora ... -
存储过程操作同义词
2010-05-18 11:39 1512A用户ab01 表,B用户通过同义词访问A用户的ab01表 ... -
用Bulk Collect提高查询效率
2010-05-05 16:38 1231Oracle8i中首次引入了Bulk Collect特性, ... -
oracle 统计分组语句
2010-04-22 17:32 2169在应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时 ... -
oracle 控制语句
2010-04-22 17:29 1272一、条件分支语句 条件分支语句用于依据特定的情况选择要执行的操 ... -
oracle 存储过程语法
2010-04-22 17:26 3279子程序是指被命名的PL/SQL块,这些块可以带有参数,可以在不 ... -
oracle 函数
2010-04-22 17:23 1433一、开发函数 函数用于返回特定数据,如果在应用程序中经常需要返 ... -
oracle 触发器
2010-04-22 17:19 4385触发器是指存放在数据库中,并被隐藏执行的存储过程。在Orac ... -
oracle 复合数据类型(pl/sql记录)
2010-04-22 17:16 2040为了简化单行多列数据的处理,可以使用PL/SQL记录;为了保留 ... -
oracle 复合数据类型(批量绑定)2
2010-04-22 17:12 1622一、PL/SQL集合 为了处理单列多行,可以使用PL/ ... -
oracle 显示游标
2010-04-22 16:57 1426在oracle9i之前,为了查询处理select语句返回的多行 ... -
Oracle SQL语句(连接查询)
2010-04-22 16:02 3392一、内连接和外连接 内连接用于返回满足连接条件的记录;而 ... -
关于dbms_sql的使用
2010-03-29 16:31 890关于dbms_sql的使用 PL/SQL ... -
使用Oracle的DBMS_SQL包执行动态SQL语句
2010-03-29 11:29 2567DECLARE v_cursor NUMBER ...
相关推荐
为了提高程序的性能和可读性,需要遵守一定的最佳实践,例如使用合适的数据类型、避免使用 global 变量等。 九、PL/SQL 数据类型 PL/SQL 提供了多种数据类型,例如数字、字符、日期等。数字类型包括整数、浮点数等...
书中详细讨论了何时使用B树索引、位图索引、函数索引以及复合索引,以及如何根据数据分布和查询模式来选择最合适的索引类型。 2. **表分区**:当处理大规模数据时,表分区能显著提高查询性能。书中介绍了范围分区、...
PL/SQL支持多种数据类型,包括数值型(如NUMBER)、字符型(如VARCHAR2、CHAR)、日期型(DATE)、布尔型(BOOLEAN)以及复合和记录类型。变量可以在声明部分声明,并在执行部分赋值和使用。 **控制流程语句** PL/...
2. 分区和分片:介绍Oracle中的高级特性,如范围分区、列表分区、哈希分区和复合分区,以及数据分片的策略。 3. 存储优化:讨论索引的类型(B树、位图、函数索引)和创建,以及如何通过分析和统计优化查询性能。 4. ...
- **并行度设置**:适当增加并行度可以有效提高数据加载和批量处理的速度。 ##### 2.3 SQL 语句优化 - **避免全表扫描**:通过建立合适的索引来减少数据访问量。 - **减少排序操作**:尽可能使用索引而不是排序来...
9. **使用合适的数据类型**:根据实际需求选择最小的数据类型,减少存储空间,提升处理速度。 10. **减少事务大小**:大事务可能导致长时间锁定资源,影响并发性能。尽量将大事务分解为小事务,降低锁的竞争。 11....
3. **数据类型**:介绍Oracle支持的内置数据类型,如NUMBER、VARCHAR2、DATE等。 4. **运算符和表达式**:包括算术、比较和逻辑运算符,以及如何构建复杂的表达式。 5. **流程控制语句**:如IF-THEN-ELSIF、CASE、...
接下来,我们探讨高级数据类型,如复合类型(记录和表类型)、嵌套表和关联数组。这些数据类型允许我们处理复杂的数据结构,例如存储多个行或列的数据,增强程序的灵活性。 PL/SQL中的游标用于逐行处理查询结果,...
使用复合数据类型 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记录表...
- 通过绑定变量、索引、物化视图、存储过程和批量操作等技术可以优化PL/SQL代码的执行效率。 14. **错误处理和日志记录** - 错误处理不仅限于异常处理,还包括RAISE语句手动抛出错误,以及使用DBMS_OUTPUT记录...
PL-SQL支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)以及复合和记录类型。变量可以在声明部分定义,然后在执行部分进行操作。 三...
2. **PL/SQL数据类型**:学习Oracle支持的各种内置数据类型,如数值类型(NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)以及复合类型(记录和数组)。 3. **变量声明...
3. **批处理操作**:批量插入、更新和删除数据,减少网络传输和数据库交互次数。 4. **Oracle存储过程**:编写和调用存储过程,实现复杂的业务逻辑,提高执行效率。 三、Oracle高级特性 1. **物化视图**:创建...
- 全表扫描(Full Table Scan, FTS): 当Oracle进行全表扫描时,它不会按单个数据块读取,而是以批量方式一次性读取多个数据块,从而提高效率。这种方式适用于表较小或没有合适索引的情况。 - 通过ROWID访问: ...
1. **PL/SQL基础**:包括变量声明、数据类型、常量、条件语句(IF-THEN-ELSIF)、循环结构(WHILE, FOR, LOOP),以及异常处理(BEGIN-EXCEPTION-END块)。 2. **PL/SQL过程和函数**:详细介绍了如何创建和调用存储...
- 定义:使用`CREATE [OR REPLACE] PROCEDURE`语句创建,指定过程名、参数(可选)、参数模式(IN, OUT, IN OUT)和数据类型。例如: ```sql CREATE OR REPLACE PROCEDURE USP_Learning( p_para1 VARCHAR2 := '...
7. **批次插入大量数据**:批量插入数据比单条插入更有效率。使用BULK COLLECT INTO和FORALL语句来提升插入性能。 **二、SQL的使用** 1. **show和set命令**:在SQL*Plus中,show命令用于显示当前设置,set命令用于...
38. **避免改变索引列的类型**:更改索引列的数据类型可能导致索引失效。 39. **需要当心的WHERE子句**:避免在WHERE子句中使用可能导致全表扫描的表达式。 40. **连接多个扫描**:理解并优化JOIN操作,减少全表...
在Oracle中,应合理创建和使用B树索引、位图索引、函数索引等,以适应不同类型的查询需求。避免在频繁更新的列上创建索引,因为这会增加写操作的开销。同时,考虑使用复合索引,以提高多条件查询的效率。 二、查询...
复合索引可以针对多列查询进行优化,但需注意索引维护的额外成本。 2. **避免全表扫描**:尽量避免在SQL语句中使用“*”来获取所有列,这会导致全表扫描。明确指定需要的列可以减少I/O操作,提高查询效率。 3. **...