1、集合和成员函数,第十章,回顾,在上一章中,我们讨论了数据库触发器内置程序包,2,目标,本章讨论PL/SQL表和记录嵌套表和可变数组成员函数和过程,3,PL/SQL 表和记录9-1,PL/SQL 表在PL/SQL块中临时使用、像数组一样的对象包含一列和一个主键不能对列和主键进行命名列可以是任何标量数据类型主键必须是binary_integer类型大小没有限制,4,PL/SQL 表和记录9-2,声明 PL/SQL 表在块、子程序或程序包的声明部分进行声明所包含的步骤定义表的类型TYPE typename IS TABLE OF col_def INDEX BY BINARY_INTEGER;声明该
2、类型的一个 PL/SQL 表Tablename typename;其中 typename 是类型名。,5,PL/SQL 表和记录9-3,引用 PL/SQL 表使用主键值引用 PL/SQL 表中的行tablename (key_value)其中,tablename 是表名,key_value 是键值。赋值要给某行赋值,请使用 tablename (key_value): = expression;其中 tablename 是表名,key_value 是键值, expression 是表达式。,6,PL/SQL 表和记录9-4,管理 PL/SQL 表使用 Insert 语句从表中向数据库中添加数据
3、使用 Delete 语句从表中删除数据,7,PL/SQL 表和记录9-5,记录存储在字段中的一组相关数据项字段有自己的名称和数据类型可以使用 %ROWTYPE 来声明记录,它表示表的行优点用户定义的记录可以有任意数目的不同数据类型的列,8,PL/SQL 表和记录9-6,声明记录首先,定义记录类型TYPE typename IS RECORD (列定义.);其中,typename 是类型名。 声明一个该类型的记录作为标识符recordtype typename;其中 recordtype 是记录类型,而 typename 是类型名。%type和%rowtype 可以用来指定列的数据类型。NOT
4、NULL 列必须在声明部分进行初始化。,9,PL/SQL 表和记录9-7,引用记录引用字段的语法是recordname.columnname 用于给列赋值的语法是recordname.columnname: = expression; 其中,recordname 是记录名,而 columnname 是列名,expression 是表达式。,10,PL/SQL 表和记录9-8,批量绑定绑定 - 对 PL/SQL 变量的赋值批量绑定 - 一次绑定一整个集合提高 DML 语句的性能FORALL 关键字用于要在发送到 SQL 引擎之前对输入集合进行批量绑定,11,PL/SQL 表和记录9-9,BULK
5、 COLLECT 子句通知 SQL 引擎在将输出集合返回到 PL/SQL 引擎之前对它们进行批量绑定用于下列子句SELECT INTOFETCH INTORETURNING INTO,12,嵌套表和可变数组11-1,嵌套表嵌套在另一个表中的表可以直接使用 SQL 进行操纵通过添加额外的集合方法来扩展索引检索表的功能声明嵌套表用来声明的语法是TYPE tablename IS TABLE OF tabletype;其中,tablename 是表名,而 tabletype 是表类型。,13,嵌套表和可变数组11-2,嵌套表声明时初始化为 NULL使用构造函数来完成初始化构造函数跟表类型同名,14,
6、嵌套表和可变数组11-3,创建嵌套表所包含的步骤使用 CREATE TYPE 语句来创建类型使用 AS TABLE OF 子句基于此类型创建另一个类型使用 CREATE TABLE 语句来创建表,关键字为 NESTED TABLE STORE AS,15,嵌套表和可变数组11-4,嵌套表与索引检索表相似之处数据类型有相同的结构用下标来访问单个元素为索引检索表编写的代码同样适用于嵌套表,16,嵌套表和可变数组11-5,嵌套表与索引表 差异,17,嵌套表和可变数组11-6,可变数组类似于 C 或者 Pascal 中的数组的数据类型类似于嵌套表或者索引检索表可以对其元素数目设置限制,18,嵌套表和可
7、变数组11-7,声明可变数组用于声明可变数组的语法是TYPE typename IS VARRAY(maximum_size) OF element_type (not null); typename 是可变数组名Maximum_size 设置了元素的数目Element_type 不能为 boolean、ref 游标、表或者另一种可变数组类型,19,嵌套表和可变数组11-8,可变数组可变数组可以存储在数据库的列中只可以整个地对可变数组进行操纵要修改一个可变数组,首先要把其值选到一个变量中,进行修改,然后插入到表中,20,嵌套表和可变数组11-9,集合方法,21,嵌套表和可变数组11-10,集合
8、方法,22,嵌套表和可变数组11-11,可变数组与嵌套表相似之处允许使用下标来访问单个元素可以存储到数据库的表中差异可变数组有最大容量,而嵌套表没有可变数组 - 跟包含它的表存储在一起, 嵌套表 - 存储在单个表中,23,成员函数和过程2-1,构造函数方法Oracle 的每个对象均有一个内置的构造函数方法用于创建对象的一个实例无需显式地定义与对象类型同名,24,成员函数和过程2-2,对象类型包含类型规格和类型主体类型规格应用程序的接口声明数据结构和操作来操纵数据类型主体定义方法实现规格,25,总结2-1,PL/SQL 表有一列和一个主键记录是存储在字段中的一组相关数据批量绑定一次绑定整个集合并提高性能嵌套表类似于 PL/SQL 表并且大小不受限制,26,总结2-2,嵌套表自动地初始化为空可变数组的长度可变可变数组的最大容量需要在声明数组时指定可变数组跟包含它的表是存放在一起的,27,演讲完毕,谢谢观看!,