Oracle的特殊数据类型(2)

操作   含义   语法  
EXISTS   检查集合中是否存在某个元素   collection.EXISTS(index)  
COUNT   返回集合中元素的个数   collection.COUNT  
LIMIT   返回VARRAY中的最大条目数   collection.LIMIT  
FIRST   返回集合中的第一个元素   collection.FIRST  
LAST   返回集合中最后一个元素   collection.LAST  
NEXT   返回集合中下一个元素   collection.NEXT  
PRIOR   返回集合中的上一个元素,如果不存在,则返回NULL   collection.PRIOR  
EXTEND   扩展集合中元素的个数。不能用于关联数组或其他未被
初始化的集合
  collection.EXTEND(给集合增加单个元素)
collection.EXTEND(n) :给集合增加n个元素
collection.EXTEND(n,I):通过复制下标I的值,给集合增加n个元素
 
TRIM   从集合结尾处删除元素   collection.TRIM;从结尾处删除单个元素
collection.TRIM(n):从集合结尾处删除n个元素
 
DELETE   从集合中删除元素   collection.DELETE:从集合中删除所有元素
collection.DELETE(n):从集合中删除下标为n的元素
collection.DELETE(m,n):从集合中删除下标值位于m,n之间的元素
 

 

集合使用注意事项:

EXTEND、TRIM和DELETE以外其他操作都返回值

根据环境所定义的语言,包含VARCHAR2下标的关联数组按字母顺序排列

如果集合为空(NULL),则FIRST和LAST返回NULL,它不包含于任何元素

如果集合中不存在下一个或上一个元素,则NEXT和PRIOR返回NULL

EXTEND 和 TRIM 不能用于关联数组

LIMIT可以用于限制添加至集合的值的个数,通常的语法是l select... into

 

集合的适用性:集合类之间存在的差异

    关联数组   嵌套表   VARRAY  
下标类型   数字或字符串   数字   数字  
声明为固定大小        
允许稀疏下标        
在数据库中存储        
访问存储在集合中的各个元素   N/A      

 

 

 

11.BULK COLLECT

使用BULK COLLECT和关联数组的结合,可以进行批处理操作,如下所示:

TYPE REC IS RECORD(...,...);

定义关联数组类型:TYPE rec_table is TABLE OF rec index by PLS_INTEGER;

声明变量:rec_table_array rec_table;

 

OPEN cursor;

fetch cursor bucket into rec_table_array;

close cursor;

FOR counter in rec_table_array.FIRST ... rec_table_array.LAST

LOOP

//处理逻辑

END LOOP;

 

12.FORALL

FORALL结构允许执行写操作时获得与BULK COLLECT所提供的相同效率,这个结构封装多个写语句,并且在单一的消息中将它们发送给ORACLE数据库,从而提高该操作的总体性能。

 

FORALL结构的语法如下:

FORALL index_name in lower_bound ... upper_bound

sqlstatment

 

其中index_name是一个为在该FORALL循环中使用而隐士声明的变量。

lower_bound和upper_bound限制该集合的范围,这个循环是针对集合的。

例如:如果想要使用FORALL插入位于集合中的所有所有记录:

FORALL jh_index in jh.FIRST .. jh.LAST

INSERT INTO HR.JOB_HISTORY VALUES jh(jh_index);

 

注意:挡在FORALL 循环中包含SAVE EXCEPTIONS关键字时,该循环不再对个别SQL语句中的错误报告异常。

相反,如果在FORALL循环的处理过程中出现任何异常,则在该处理过程结束时报告错误代号为-24381的一个异常。

 

 

FORALL的改进

1.INDICES OF

这是一种对稀疏集合处理的改进。该集合的记录并非连续分布---他们连续地分布在集合的整个范围内。

FORALL INDICES OF collection_name [between lower_bound... upper_bound]

sql_statement

 

以上语句告诉FORALL读下一个下标值而不是下一个连接的值。使用 INDICES OF 子句可以让FORALL结构适用于稀疏集合。

通过指定集合的上、下边界, INDICES OF 子句还允许只选择处理整个集合的一部分。

 

2.VALUES OF

这种改进使得FORALL结构的应用更具灵活性。

VALUES OF 子句允许使用另一种集合, 确定哪些记录作为FORALL结构的目标。

 

FORALL index_values VALUES OF driver_collection

使用这个子句的唯一要求是该驱动集合必须是嵌套表或关联数组。用于这种结构的关联数组的下标和元素都必须是BINARY_INTEGER或PLS_INTEGER

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/84f473e5db6a27ecbaa5ab7866c2c3a7.html