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

    技术2022-05-19  22

     

     

     

     

    表 (相当于数组)

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

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

     

     

     

     

     

     

     


    最新回复(0)