索引表
下标能为负,个数不限的数据类型
语法:
TYPE type_name is table of element_type
[not null]index by key-type
key-type表示下标的数据类型,oracle索引表的下标支持BINARY_INTEGER,PLS_INTEGER,VARCHAR2
DECLARE
TYPE TABLE_TYPE IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
MYTYPE TABLE_TYPE;
BEGIN
SELECT NAME INTO MYTYPE(-1) FROM KT WHERE ID=1;
DBMS_OUTPUT.PUT_LINE(MYTYPE(-1));
END;
无限个数,下标可以为fu
嵌套表
下标从1开始,并且个数不受限制,嵌套表可以是稀疏的。所谓稀疏意思是表下标对应的内容部一定都存在
语法:
TYPE type_name is table of element_type;
嵌套表在使用之前,必须先进行构造函数初始化,这点与索引表不同。
DECLARE
TYPE TABLE_TYPE IS TABLE OF KT.NAME%TYPE;
MYTYPE TABLE_TYPE;
BEGIN
MYTYPE:=TABLE_TYPE('TIGER','TIGER','TIGER');
SELECT NAME INTO MYTYPE(2) FROM KT WHERE ID=1;
DBMS_OUTPUT.PUT_LINE(MYTYPE(2));
END;
嵌套表不仅可以在PL/SQL中使用,还可以作为表的一列使用。
在作为表的列使用时,必须使用CREATE TYPE TABLE_TYPE IS TABLE OF element_type;
并且要为嵌套表列指定专门的存储表。
CREATE TABEL TEST(ID NUMBER(3),NAME VARCHAR2(20),
MYTYPE TABLE_TYPE
)NESTED TABLE MYTYPE STORE AS MYTYPE_TABLE;
为嵌套表列插入数据时,使用构造函数
BEGIN
INSERT INTO TEST VALUES(1,'SCOTT',TABLE_TYPE('TIGER','TIGER'))
END;
变长数组 varray
元素下标从一开始,并且元素个数是有限制的
TYPE TYPE_NAME IS VARRAY(SIZE_LIMIT) OF ELEMENT_TYPE[NOT NULL];
在使用时,必须先调用构造函数进行初始化。
也可以作为表列使用,用法与嵌套表类似
记录表
记录表是用来处理多行多列数据的
TYPE TYPE_NAME IS TABLE OF TABLE%ROWTYPE
INDEX BY BINARY_INTEGER;