PL/SQL集合和记录
复合数据类型存储的值具有内部结构,可以将整个复合变量作为参数传递给子程序,可以单独地访问复合变量中的内部结构。内部结构可以是scalar或仍是复合类型。PL/SQL允许定义2种类型的复合数据类型:集合和记录。
在集合中,内部结构总是具有相同的数据类型,被称为元素。可以通过下标访问集合中的每个元素。
变量名(下标); |
为了定义一个集合变量,可以先定义一个集合类型,然后使用该集合类型定义变量;也可以使用%TYPE。
在记录中,内部结构可以有不同的数据类型,称为域。可以通过域的名称来访问记录变量中的每个域。
变量名.域名 |
创建记录类型变量,可以先定义一个记录类型,然后使用该记录类型定义变量;可以使用%ROWTYPE;也可以使用%TYPE
可以创建包含记录的集合,和包含集合的记录。
注意:本章的许多练习中使用到了下面的存储过程:
CREATE OR REPLACE PROCEDURE print (n INTEGER) IS BEGIN IF n IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(n); ELSE DBMS_OUTPUT.PUT_LINE('NULL'); END IF; END print; |
集合类型
PL/SQL有3种类型的集合:associative数组,VARRAY(可变数组),嵌套表。
集合类型 | 元素个数 | 下标类型 | 密集/稀疏 | 未初始化 的状态 | 定义位置 | ADT类型? |
关联数组 | 不确定 | 字符串/ PLS_INTEGER | 2者之一 | Empty | 块或包 | 不 |
VARRAY | 确定 | INTEGER | 始终密集 | NULL | 块、包、方案 | 在方案中是 |
嵌套表 | 不确定 | INTEGER | 开始密集,可能会变成稀疏 | NULL | 块、包、方案 | 在方案中是 |
元素个数,如果元素个个数是确定的,则指集合中的最大元素个数;如果元素个数不确定,则最大元素个数是下标的上限值。
密集的:元素之间没有空隙,就是第1个和最后一个元素都被定义并且有值(值可以为NULL)。
EMPTY集合是存在的,但没有元素。给空集合添加元素调用EXTEND方法。
NULL集合是不存在的,把NULL集合变成存在的集合,必须要初始化它(使用它成为EMPTY集合,或给它赋一个非NULL的值),不能使用EXTEND来初始化NULL集合。
定义位置,定义在PL/SQL块中的集合类型是一个局部类型,只有在块中可访问。只有当块是一个单独的存储或包子程序时,才被存储在数据库中
定义在包规范中的集合类型是公有成员。可以在包外通过限定名来引用它。它存储在数据库中。
定义在方案中的集合类型是一个独立的存储类型。使用CREATE TYPE来创建。
非PL/SQL复合类型与PL/SQL复合类型的对照关系(problem)
哈希表 | 关联数组 |
无序表 | 关联数组 |
集合 | 嵌套表 |
袋子 | 嵌套表 |
数组 | VARRAY |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1107180/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1107180/