KES中数组和集合类型的区别
文章概要:
本文属于学习总结系列,总结了一下数组类型和PL/SQL中集合类型及其使用区别。
一,集合(collection)数据
它是存放一组数据类型相同的数据,是一组相同类型元素的集合
集合数据类型分三类:
1).关联数组(index by tables)
元素下标:binary_integer、pls_integer、varchar2字符串等作为下标
个数限制:无限制
初始化:不需要
2).嵌套表(nested table)
元素下标:从1开始,只能为正整数
个数限制:无限制
初始化:赋值前需要
3).可变数组(varray:variable-size arrays)
元素下标:从1开始
个数限制:有最大个数
初始化:赋值前需要
三种类型的典型声明格式(仅举例典型的语法格式):
-- 定义一个可变数组类型 MY_ARRAY,最大容量是100,元素类型是 VARCHAR2
TYPE MY_ARRAY IS VARRAY(100) OF VARCHAR2(15);
-- 定义一个关联数组类型 MY_MAP,键的类型是 PLS_INTEGER,值得类型是 VARCHAR2
TYPE MY_MAP IS TABLE OF VARCHAR2(15) INDEX BY PLS_INTEGER;
-- 定义一个嵌套表类型 MY_ROW,元素类型是 VARCHAR2
TYPE MY_ROW IS TABLE OF VARCHAR2(15);
二,数组类型
KES允许在表或块中定义一维或者多维数组。可以创建元素是任何内建或用户定义的基类、枚举类型、组合类型或者域的数组。
一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名,可以在[]指定大小,也可以不指定。
但指定长度与未指定长度的数组相同,即不做个数限制,当前的实现也不会强制所声明的维度数。
一个特定元素类型的数组全部被当作是相同的类型,而不论其尺寸或维度数。
比如,我们可以声明带数组的表
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[3][3]
);
三,数组和集合类型的区别
数组类型和PL/SQL中的集合类型主要有以下区别:
- 语法:
声明时,在PG中,数组使用方括号([])表示,例如:integer[]
表示整数数组。而在PL/SQL中,集合使用关键字来表示,例如:TYPE array_name IS TABLE OF integer;
表示整数集合。
- 数据结构:
数组是有序的,元素可以按照索引进行访问。而集合是无序的,元素没有固定的顺序。
- 元素的重复性:
数组允许元素的重复,可以在数组中存储多个相同的元素。而集合不允许重复元素,每个元素在集合中只能出现一次。
- 插入和删除操作:
由于数组是有序的,插入和删除元素需要移动其他元素以保持顺序。而集合不需要维持元素的顺序,因此插入和删除操作更加高效。
- 查询操作:
数组可以通过索引直接访问元素,因此在查询特定位置的元素时更快。而集合需要进行遍历才能找到特定元素。
四,小结
数组和集合作为能存储相同类型的元素的数据类型,总的来说,数组适用于需要有序访问和允许重复元素的场景,数据操作和数据交互不多的场景。
而PL/SQL中的集合适用于不需要保持顺序并且需要确保元素唯一性、数据操作多的场景。
在选择使用哪种数据类型时,需要根据具体的应用需求进行判断。