表 (相当于数组)
定义一个表类型的语法如下:
TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER
其中Tabletype是被定义的表类型的名,Type是预定义的标量类型或者%TYPE来引用的标量类型。表的索引是BINARY_INTEGER类型,当定义了表类型后,就可以声明该类型的变量了。
--定义表类型t_NameTable,其元素类型是auths数据库表中的name列的类型
TYPE t_NameTable IS TABLE OF auths.name%TYPE
INDEX BY BINARY_INTEGER;
--定义表类型t_Address,其元素类型是auths表中的address列的类型
TYPE t_AddressTable IS TABLE OF auths.address%TYPE
INDEX BY BINARY_INTEGER;
--声明两个表类型变量
v_name t_NameATable;
v_Address t_AddressTable;
当定义了表类型,并声明了这个类型变量后,就可以通过下面的语法应用PLSQL表中的元素了:
tablename(index);
其中tablename是表明,index是表的索引,它用BINARY_INTEGER类型的变量或是能够转换成BINARY_INTEGER类型的表达式表示.
使用上面的表,为表元素赋值:
BEGIN
v_Name(2) := 'Wang';
v_Address(-3) := 'streetr 1';
END;
eg2:
DECLARE
TYPE t_AuthorRecord IS TABLE OF auths%ROWTYPE
INDEX BY BINARY_INTEGER;
v_Auths t_AuthorRecord;
BEGIN
SELECT *
INTO v_Auths(00009)
FROM auths
WHERE author_code = 'A00009';
END;
因为v_Auths表中的每一个元素都是记录,所以可以通过下面的语法引用记录中的域
table(index).field
记录表在相当程度上提高了PLSQL表的功能,因为一个记录表就可以存放一个数据库表中的所有信息。
PLSQL表与数组一样,当时表的实际结构与数组是不一样的,它与C中的数组有以下不同:
1)PLSQL表中的元素没有特定的顺序,因为表中的元素不像数组一样被连续地存储在一个空间内。
2)在PLSQL表中的KEY不必是连续的,任意BINARY_INTEGER类型的值或是表达式都可以作为表的索引(key列)。
3)当向一个PLSQL表中插入一个元素时,就为该表分配了用以存放该元素的存储空间。plsql表的大小是没有限制的。
表属性
PLSQL中,不仅引入了表,而且通过了表属性扩展了PLSQL表的功能,使用表属性的语法是:
table.attribute
语法 返回类型 描述
Table.COUNT NUMBER 返回PLSQL表中元素个数
Table.DELETE N/A 删除PLSQL表中所有元素
Table.DELETE(i) N/A 删除PLSQL表中索引号为i指定的元素
Table.DELETE(i,j) N/A 删除PLSQL表中索引号i到j之间(包括i和j)指定的元素
Table.EXISTS(i) BOOLEAN 如果PLSQL表中索引号为i的元素存在,则返回TRUE
Table.FIRST BINARY_INTEGER 返回PLSQL表中最后一个元素(索引号最小)的索引
Table .LAST BINARY_INTEGER 返回PLSQL表中最后一个元素(索引号最大)的索引
Table.NEXT(i) BINARY_INTEGER 返回PLSQL表中索引号为i的元素的后继一个元素的索引
Table.PRIOR (i) BINARY_INTEGER 返回PLSQL表中索引号i的元素的前一个元素的索引
表中的索引号从1开始,每增加一个元素,索引号随之增加1,也就是说索引号为1的下一个元素的索引号是2,再下一个元素的索引号为3,以此类推,使用这样的方法建立的PLSQL表,其表元素在控制结构体中的循环实现起来更简单,当PLSQL块在Pro*C或OCI程序中北调用或被嵌入时,使用上述所有方法建立的PLSQL表能绑定到C语言的数组上.