PL/SQL学习笔记(八)

上一篇 / 下一篇  2007-06-07 11:11:53 / 个人分类:数据库使用

1. PL/SQL支持三类集合:

索引表;嵌套表;变长数组

2. 索引表是一个由元素组成的表,它被保存在内存中,其中每一个元素用一个整数值做索引。索引表的功能与数组类似,但有两个主要的区别:

  • 索引表可以稀疏地填充;
  • 不给索引表设置最大长度。

3. 通过声明一个类型,然后声明一个或多个这种类型的变量来声明索引表。声明类型时,指定了集合的数据类型,并指定了表索引的数据类型。集合的数据类型可以是标量类型(如NUMBER或VARCHAR2)或复合类型(如记录)。表索引的数据类型必须是BINARY_INTEGER.声明索引表类型的语法如下:

TYPE type_name IS TABLE OF data_type [NOT NULL] INDEX BY BINARY_INTEGER;

4. 可以用table_name.EXISTS(index_num)来判断某个索引值对应的条目是否存在。

5. 删除索引表中的条目:

table_name.DELETE[(first_entry[,last_entry])];

6. 在数据库中,嵌套表是一个无序记录集合。声明嵌套表类型的语法:

TYPE type_name IS TABLE OF data_type (NOT NULL);

如果需要PL/SQL专用数据类型(如BOOLEAN/NATUAL或INTEGER)的数组,则只能选择索引表。

7. 给嵌套表添加条目与给索引表添加条目有些不同。必须使用构造函数初始化嵌套表后,才能给它添加条目。初始化嵌套表后,如果要增加表的大小,需要调用extend方法。

构造函数的名称与声明表时使用的类型名称相同,例如:

depts := dept_table();

也可以在调用构造函数时,给它传递一个或多个条目的值,如

depts := dept_table(dept1,dept2);

8. 对于嵌套表,使用delete()方法删除条目后,exists()方法并不知道删除了一些条目,所以删除条目后工作区必须至少执行一次count()方法

9. 声明变长数组类型的语法如下:

TYPE type_name IS (VARRAY|VARYING ARRAY) (size) OF entry_type [NOT NULL];

10. 批绑定让您编写对集合中所有条目进行操作的SQL语句,而不必使用PL/SQL代码在集合中循环。从SQL(取回数据)到PL/SQL(将数据添加到数组中)的切换被称为关联转换(context switch),这增加了许多开销。可以使用批绑定避免大部分这种开销。

两个新关键字支持绑定。BULK COLLECT用于SELECT语句中,将所有的数据放到一个集合中;FORALL用于INSERT/UPDATE/DELETE语句中,以便对集合中的每一个元素执行这些语句一次。

11. 可以在SELECT INTO语句和FETCH 语句中使用BULK COLLECT。(但是BULK COLLECT不能使用记录表)

12. 关键字FORALL允许您将一条数据操纵语言(DML)语句(即INSERT/UPDATE或DELETE)基于一个集合的内容,使用FORALL时,该语句对集合中的每个条目执行一次,但从PL/SQL到SQL的关联转换只有一次,这使得性能比在PL/SQL中使用循环快的多。


TAG: 数据库使用

 

评分:0

我来说两句

Open Toolbar