-
定义简单类型的可变数组
-
可变数组是一个对象的集合,其中每个对象都具有相同的数据类型;
- 可变数组的大小在创建时决定;
- 在表中建立可变数组后,可变数组在主表即为一个列;
- 可变数组允许用户在表中存储重复的属性;
- 创建可变数组类型语法:
-
create [or replace] type 类型名称 as|is varray(长度) of 数据类型 [not null]; |
-
示例1:定义部门表,使用可变数组
- 创建项目数组:
create or replace type project_varray as varray(3) of varchar2(50); | |
此句创建了一个数组型的数组,数组的长度为3,即每个部门的项目只能有3个 | |
DROP TABLE department PURGE ; CREATE TABLE department ( did NUMBER , deptname VARCHAR2(30) NOT NULL , projects project_varray , CONSTRAINT pk_did PRIMARY KEY (did) ) ; | 分析: |
- 向department表中增加数据
INSERT INTO department(did,deptname,projects) VALUES (10,'Oracle', project_varray('ERP','CRM','CMS')) ; INSERT INTO department(did,deptname,projects) VALUES (20,'MLDN出版部', project_varray('《Java开发实战经典》','《Anbdroid开发实战经典》')) ; COMMIT ; |
定义的数组(project_varray)只能包含3个元素,所以增加数据时,项目名称最多增加了3个 |
- 查看department表数
SELECT * FROM department ; |
效果: |
- 要想查询一个部门的所有项目,依然需要使用TABLE嵌套子查询的操作来完成
SELECT * FROM TABLE ( SELECT projects FROM department WHERE did=20) ; |
-
修改可变数组的内容时,需要将全部数据进行修改。删除时,也要将所有数据一起删除;
- 修改一个部门的项目
UPDATE department SET projects=project_varray('《Oracle开发实战经典》','《Java开发实战经典》','《Android开发实战经典》') WHERE did=20 ; COMMIT ; |
- 查询更新后的部门信息
SELECT * FROM TABLE ( SELECT projects FROM department WHERE did=20) ; |
-
定义复合类型的可变数组
- 此示例知识有待补充
-
在PL/SQL中使用可变数组
- 可变数组定义后,也可以作为PL/SQL使用的数据类型直接在程序中使用
- 示例1:在PL/SQL中使用可变数组
DECLARE TYPE project_varray IS VARRAY(3) OF VARCHAR2(50) ; v_projects project_varray := project_varray(NULL,NULL,NULL) ; BEGIN v_projects(1) := 'JAVA SE' ; v_projects(2) := 'JAVA EE' ; v_projects(3) := 'Android' ; FOR x IN v_projects.FIRST .. v_projects.LAST LOOP DBMS_OUTPUT.put_line(v_projects(x)) ; END LOOP ; END ; / | 运行结果: JAVA SE JAVA EE Android |
- 示例2:定义复合结构的可变数组
| 运行结果: 项目编号:10,项目名称:《Java开发实战经典》,金额:79.8,发布日期:13-8月 -08 项目编号:11,项目名称:《Java Web开发实战经典》,金额:69.8,发布日期:27-8月 -10 项目编号:12,项目名称:《Android开发实战经典》,金额:88,发布日期:19-3月 -12 |