数组类型(VARRAY)
类型介绍
数组类型是在SQL标准1999中增加的,表示有序的相同数据类型元素的集合。数据库中使用VARRY OF关键字可以创建或声明数组类型,数组内的每个元素均有一个索引下标,代表元素在数组中的位置,且可以根据下标直接访问数组元素。
VARRAY可变数组类型是一个连续的相同数据类型元素的集合,成员最多包含65535个,成员类型可以是基础类型也可以是用户自定义类型。
语法格式
创建VARRAY类型:
sql
CREATE OR REPLACE TYPE udt_name IS VARRAY(size) OF type_x;
参数说明
type_name
:定义的类型名称。size
:VARRAY数组的指定容量,创建时必须指定。type_x
:元素的数据类型,可以是基本数据类型(如 NUMBER、VARCHAR2等)或其他用户自定义类型。
示例
创建用户定义类型(UDT),使用这些类型创建表,并进行插入和查询操作。
创建VARRAY类型,定义了一个对象类型udt_obj_type和一个可变数组类型udt_varryofobj_type。
sqlCREATE OR REPLACE TYPE udt_varryofobj_type IS VARRAY(10) OF udt_obj_type;
创建表。创建了一个表varry_tab,其中包含一个列 udt_varryofobj,其数据类型为udt_varryofobj_type。
sqlCREATE TABLE varry_tab(id INT, state VARCHAR2, type VARCHAR, udt_varryofobj UDT_VARRYOFOBJ_TYPE);
插入数据。
- 使用构造函数插入数据。可以直接使用构造函数在INSERT语句中插入数据。sql
--字段类型 INSERT INTO varry_tab (id, state, type, udt_varryofobj) VALUES ( 2, '构造函数插入', 'udt_varryofobj_type', udt_varryofobj_type( udt_obj_type(1.0, '2层', 'udt_obj_type', TO_DATE('2021-08-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS')), udt_obj_type(1.0, '2层', 'udt_obj_type', TO_DATE('2021-08-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) ) );
- 使用变量插入数据。在PL/SQL块中声明一个变量,然后将该变量插入到表中。sql
-- 变量类型 DECLARE udt_varryofobj udt_varryofobj_type; BEGIN udt_varryofobj := udt_varryofobj_type( udt_obj_type(1.0, '2层', 'udt_obj_type', TO_DATE('2021-08-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS')), udt_obj_type(1.0, '2层', 'udt_obj_type', TO_DATE('2021-08-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) ); INSERT INTO varry_tab (id, state, type, udt_varryofobj) VALUES (2, 'plsql通过udt变量插入数据', 'udt_varryofobj_type', udt_varryofobj); END; /
- 使用构造函数插入数据。可以直接使用构造函数在INSERT语句中插入数据。
查询数据。
- 可以查询表中的udt_varryofobj列,查看整个UDT对象。sql
SELECT id, udt_varryofobj FROM varry_tab; ID | UDT_VARRYOFOBJ | ------------------------------------------------------------------------------ 2 | [[1,2层,udt_obj_type,2021-08-24 00:00:00],[1,2层,udt_obj_type,2021-08-24 00:00:00]]| 2 | [[1,2层,udt_obj_type,2021-08-24 00:00:00],[1,2层,udt_obj_type,2021-08-24 00:00:00]]
- 直接在SQL语句中创建UDT对象并查看其内容。sql
SELECT udt_varryofobj_type( udt_obj_type( 1.0,'2层','udt_obj_type','2021-08-24 00:00:00') , udt_obj_type( 1.0,'2层','udt_obj_type','2021-08-24 00:00:00') ) FROM DUAL; EXPR1 | ------------------------------------------------------------------------------ [[1,2层,udt_obj_type,2021-08-24 00:00:00],[1,2层,udt_obj_type,2021-08-24 00:00:00]]|
- 查询UDT的部分属性。sql
SELECT udt_varryofobj(1) ,udt_varryofobj(2) FROM varry_tab; EXPR1 | EXPR2 | ------------------------------------------------------------------------------ [1,2层,udt_obj_type,2021-08-24 00:00:00]| [1,2层,udt_obj_type,2021-08-24 00:00:00]| [1,2层,udt_obj_type,2021-08-24 00:00:00]| [1,2层,udt_obj_type,2021-08-24 00:00:00]|
- 可以查询表中的udt_varryofobj列,查看整个UDT对象。