TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY key_type; identifier type_name;type_name用于指定用户自定义数据类型的名称
SET serveroutput ON DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; ename VARCHAR2(20); BEGIN SELECT ename INTO ename_table(0) FROM emp WHERE empno = 7788; dbms_output.put_line(‘雇员名:‘ || ename_table(0)); END;示例二:在索引表中使用VARCHAR2
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;确定第一个元素和最后一个元素会以汉语拼音格式进行排序。
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‘);1、在PL/SQL块中使用嵌套表
DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE; ename_table ename_table_type; BEGIN ename_table := ename_table_type(‘‘); SELECT ename INTO ename_table(1) FROM emp WHERE empno = &empno; dbms_output.put_line(‘雇员姓名:‘ || ename_table(1)); END;ename_table_type为嵌套类型,而ename_table_type()是其构造方法。
CREATE TYPE phone_type IS TABLE OF VARCHAR2(20); CREATE TABLE employee( ID NUMBER(4), NAME VARCHAR2(10), sal NUMBER(6,2), phone phone_type ) NESTED TABLE phone STORE AS phone_table;下面通过示例说明在PL/SQL块中操纵嵌套表列的方法。
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;示例三:在PL/SQL块中更新嵌套表列的数据
DECLARE phone_table phone_type := phone_type(‘0000-123456789‘,‘1111-123456789‘,‘2222-123456789‘,‘3333-123456789‘); BEGIN UPDATE employee SET phone = phone_table WHERE ID = 1; COMMIT; END;
TYPE type_name IS VARRAY(size_limit) OF element_type [NOT NULL]; Identifier type_name;注意:当使用VARRAY元素时,必须要使用构造方法初始化VARRAY元素。示例如下:
DECLARE TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE; ename_table ename_table_type := ename_table_type(‘A‘,‘A‘);示例一:在PL/SQL块中使用VARRAY
DECLARE TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE; ename_table ename_table_type := ename_table_type(‘‘); BEGIN SELECT ename INTO ename_table(1) FROM emp WHERE empno = 7788; dbms_output.put_line(‘雇员姓名:‘ || ename_table(1)); END;示例二:在表列中使用VARRAY
CREATE TYPE phone_type IS VARRAY(20) OF VARCHAR2(20); CREATE TABLE employee( ID NUMBER(4), NAME VARCHAR2(10), sal NUMBER(6,2), phone phone_type );
DECLARE TYPE emp_table_type IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; emp_table emp_table_type; BEGIN SELECT * INTO emp_table(0) FROM emp WHERE empno = 7788; dbms_output.put_line(‘雇员姓名:‘ || emp_table(0).ename || ‘,雇员工资:‘ || emp_table(0).sal); END;
PL/SQL_使用复合数据类型2(PL/SQL集合),布布扣,bubuko.com
原文:http://blog.csdn.net/com185272358/article/details/21738961