PLSQL集合总结

一、索引表
描述
1、索引表只能作为PL/SQL符合数据类型使用,而不能作为表列的数据类型使用。
2、索引表的下标可以为负值,索引表的下标没有限制。
语法
TYPE index_table_type IS TABLE OF element_type
INDEX BY VARCHAR2|BINARY_INTEGER|PLS_INTEGER
identifier type_name
实例
实例一
DECLARE
TYPE ename_table_type IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGET
ename_table ename_table_type;
BEGIN
SELECT ename INTO ename_table(-1) FROM emp
WHERE empno=&no;
dbms_output.put_line('雇员名:'||ename_table(-1));
END;
实例二
DECLARE
TYPE area_table_type IS TABLE OF NUMBER
INDEX BY VARCHAR2(10);
area_table area_table_type;
BEGIN
area_table('北京'):=1;
area_table('上海'):=2;
area_table('广州'):=3;
dbms_output.put_line('第一个元素:'||area_table.first);
dbms_output.put_line('最后一个元素:'||area_table.last);
END;
二、嵌套表
描述
1、嵌套表的元素下标从1开始,并且元素个数没有限制。
2、嵌套表元素的数组元素值可以是稀疏的。
3、嵌套表可以当作表中的列使用
语法一
TYPE type_name IS TABLE OF element_type;
identifier type_name;
实例一
DECLARE
TYPE ename_table_type IS TABLE OF emp.ename%TYPE;
ename_table ename_table_type:=ename_table_type('A','A');
实例二
DECLARE
TYPE ename_table_type IS TABLE OF emp.ename%TYPE;
ename_table ename_table_type;
BEGIN
ename_table:=ename_table_type('MARY','MARY','MARY');
SELECT ename INFO ename_table(2) FROM emp
WHERE empno=&no;
dbms_output.put_line('雇员名:'||ename_table(2));
END;
语法二
当使用嵌套表类型作为表列的数据类型时,必须要为嵌套表列指定专门的存储表
CREATE phone_type IS TABLE OF VARCHAR2(20);
/
CREATE TABLE employee(
id NUMBER,
name VARCHAR2(10),
sal NUMBER(6,2),
phone phone_type
)NESTED TABLE phone STORE AS phone_table;
实例三
往嵌套表插入数据
BEGIN
INSERT INTO employee VALUES(1,'SCOTT',800,
phone_type('0471-3456788','13804711111'));
END;
实例四
检索嵌套表列的数据
DECLARE
phone_table phone_type;
BEGIN
SELECT phone INTO phone_table
FROM employee WHERE id=1;
FOR i IN 1..phone_table.COUNT LOOP
dbms_output.put_line('电话号码:'||phone_table(i));
END LOOP;
END;
跟新嵌套表列的数据
DECLARE
phone_table phone_type:=phone_type('0471-3456788',
'13804711111','0471-2233066','13056278568');
BEGIN
UPDATE employee SET phone=phone_table
WHERE id=1;
END;
三、变长数组
描述
1、该数据类型与高级语言数组非常相似,其元素下标以1开始,并且元素
2、的最大个数是有限制的。
语法一
TYPE type_name IS VARRAY(size_limit) OF element_type [NOT NULL];
identifier type_name;
实例一
DECLARE
TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE;
ename_table ename_table_type:=ename_table_type('A','A');
实例二
DECLARE
TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE;
ename_table ename_table_type:=ename_table_type('mary');
BEGIN
SELECT ename INTO ename_table(1) FROM emp
WHERE empno=&no;
dbms_output.put_line('雇员名:'||ename_table(1));
END;

你可能感兴趣的:(sql)