PL/SQL_使用复合数据类型2(PL/SQL集合)
来源:互联网 发布:linux systemd-logind 编辑:程序博客网 时间:2024/05/17 22:05
使用PL/SQL集合
PL/SQL集合类型是类似于高级语言数组的一种复合数据类型,集合类型包括索引表(PL/SQL表)、嵌套表(Netsted Table)和变长数组(VARRAY)等三种类型。索引表的下标不仅可以为负值,而且其元素个数没有限制。注意,索引表只能作为PL/SQL复合数据类型使用,而不能作为表列的数据类型使用。定义索引表的语法如下:
TYPE type_name IS TABLE OF element_type[NOT NULL] INDEX BY key_type;identifier type_name;type_name用于指定用户自定义数据类型的名称
element_type用于指定索引表元素的数据类型
NOT NULL表示不允许引用NULL元素
key_type用于指定索引表元素下标的数据类型(BINARY_INTEGER、PLS_INTEGER或VARCHAR2)
identifier用于定义索引表变量
示例一:在索引表中使用BINARY_INTEGER和PLS_INTEGER
SET serveroutput ONDECLARE 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;确定第一个元素和最后一个元素会以汉语拼音格式进行排序。
嵌套表
嵌套表也是一种用于处理PL/SQL数组的数据类型。注意:索引表类型不能作为表列的数据类型使用,但嵌套表类型可以作为表列的数据类型使用。定义嵌套表的语法如下:
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()是其构造方法。
2、在表列中使用嵌套表
嵌套表类型不仅可以在PL/SQL块中直接引用,也可以作为表列的数据类型使用。但如果在表列中使用嵌套表类似,必须首先使用CREATE 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块中操纵嵌套表列的方法。
示例一:在PL/SQL块中为嵌套表列插入数据
INSERT INTO employee VALUES (1,'SCOTT',800,phone_type('0471-1234567','123456789090'));
示例二:在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;
变长数组(VARRAY)
VARRAY也是一种用于处理PL/SQL数组的数据类型,它也可以作为表列的数据类型使用。该数据类型与高级语言数组非常类似,其元素下标以1开始,并且元素的最大个数是有限制的。定义VARRAY的语法如下:
TYPE type_name IS VARRAY(size_limit) OF element_type [NOT NULL];Identifier type_name;注意:当使用VARRAY元素时,必须要使用构造方法初始化VARRAY元素。示例如下:
DECLARETYPE 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);
PL/SQL记录表
PL/SQL变量用于处理单行单列,PL/SQL记录用于处理单行多列数据,PL/SQL集合用于处理多行单列数据。为了在PL/SQL块中处理多行多列数据,开发人员可以使用PL/SQL记录表。PL/SQL记录表结合了PL/SQL记录和PL/SQL集合的优点,从而可以有效地处理多行多列的数据。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;
0 0
- PL/SQL_使用复合数据类型2(PL/SQL集合)
- PL/SQL_使用复合数据类型3(多级集合)
- PL/SQL_使用复合数据类型1(PL/SQL记录)
- PL/SQL_使用复合数据类型5(批量绑定)
- PL/SQL-2 复合数据类型
- PL/SQL复合数据类型(集合与记录)
- PL/SQL使用复合数据类型4(集合操作符、比较集合)
- PL/SQL定义复合数据类型
- PL/SQL(三):复合数据类型
- Oracle PL/SQL复合数据类型
- PL/SQL(三):复合数据类型
- PL/SQL复合数据类型—record,集合(索引表,嵌套表,VARRAY)—之四
- PL/SQL_游标使用
- PL/SQL 集合数据类型(关联数组)
- PL/SQL学习(复合数据类型与游标)
- pl/sql入门第二章--复合数据类型
- PL/SQL_触发器2(行触发器)
- pl/sql复合类型
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- iOS系统GCD学习(4):dispatch_group2
- 别让灵魂赶不上影子
- 贝尔曼福特算法
- Android去除系统自带动画的两种方法
- PL/SQL_使用复合数据类型2(PL/SQL集合)
- 项目经理修炼路
- 2003年清华大学计算机研究生机试真题之五
- The Necklace
- uva 10534 Wavio Sequence | dp
- iOS系统GCD学习(5):信号量机制
- UIGestureRecognizer学习笔记
- iOS系统GCD学习(6):Dispatch Sources
- 计算机书目分享