PLSQL基础(二) 表(相当于数组)

ARM 114浏览

表 (相当于数组)

定义一个表类型的语法如下:

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.FIRSTBINARY_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语言的数组上.