ITPub博客

首页 > 数据库 > 国内数据库 > 羲和(halo)数据库集合类型系列——学会可变数组(Varray)的正确使用

羲和(halo)数据库集合类型系列——学会可变数组(Varray)的正确使用

原创 国内数据库 作者:小满未满_ 时间:2024-10-22 11:46:47 0 删除 编辑

一、前言

前不久,咱们带来了关于羲和数据库集合类型中的嵌套表、关联数组的使用,因为中途临时有事情要忙,所以小咕了一会, 相关链接如下

羲和(halo)数据库集合类型系列——学会嵌套表(Nested Table)的正确使用

羲和(halo)数据库集合类型系列——关联数组(Associative Array)

今天要给大家带来的是 羲和(halo)数据库集合类型基础用法最终章—— 可变数组(Varray) 相关内容。

可变数组(Varray)其实和嵌套表没什么太大的差异,最大的差异点就在于可变数组大小是声明类型时便已经确定了,而嵌套表是可以一直动态增长的。


二、可变数组(Varray)

访问可变数组(Varray)的元素也和访问嵌套表元素一致,支持通过下标访问,最小下标值为1,通过小括号访问。

-- 访问n号元素 n为int类型 n >= 1
collection_name(n)

可变数组始终是密集的,嵌套表是可密集也可以稀疏的集合。如下图:


但其并不意味着可变数组(Varray)不支持DELETE集合方法,它允许通过DELETE删除集合中所有元素。

可变数组(Varray)语法定义如下:

-- 在Package或匿名块中
TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) 
   OF element_type [NOT NULL];
-- 在SQL场景中,创建全局的可变数组类型
CREATE TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) 
   OF element_type [NOT NULL];


三、可变数组(Varray)变量初始化

如果想正常使用可变数组(Varray),则必须对可变数组(Varray)进行初始化的动作,而对可变数组(Varray)进行初始化,需要使用对应构造函数。对于此处的构造函数而言,便是和可变数组(Varray)类型同名的函数。

初始化的动作可以发生在声明区域,也可以发生在执行区域。初始化的元素个数不能超过定义的大小。一个简单的示例如下

Halo:


Oracle:



四、集合方法

集合方法是对集合进行操作的内置函数或过程,一般点上相关方法,便代表着调用该方法。

collection_name.collection_method

可变数组(varray)也支持以下集合方法:

EXISTS
COUNT
LIMIT
FIRST and LAST
PRIOR and NEXT
EXTEND
TRIM
DELETE

通过相关的集合方法,可以帮助我们更容易的处理可变数组(Varray)的相关内容。

4.1、EXISTS

EXISTS用于检查元素是否存在,一般的使用语法为EXISTS(n),当可变数组(Varray)中n号位置元素存在,则返回ture,如果不存在,将返回false。

Halo:


Oracle:



4.2、COUNT

COUNT方法用于返回可变数组中元素总体数量

Halo:


Oracle:


4.3、LIMIT

LIMIT方法返回可变数组在声明时定义的大小。

Halo:


Oracle:



4.4、FIRST and LAST

FIRST方法用于返回可变数组中第一个元素下标,LAST方法用于返回可变数组中最后一个元素下标。

Halo:


Oracle:



4.5、PRIOR and NEXT

PRIOR方法用于返回上一个存在元素的下标,如果不存在上一个元素,则返回NULL。一般语法为PRIOR(n)

NEXT方法用于返回下一个存在元素的下标,如果不存在下一个元素,则返回NULL。一般语法为NEXT(n)

Halo:


Oracle:


4.6、EXTEND

EXTEND方法用于扩充可变数组的大小,不得超过声明的最大大小。

  • EXTEND将一个 null 元素追加到可变数组中。

  • EXTEND(n)将n个null 元素追加到可变数组中。

Halo:


Oracle:



4.7、TRIM

有扩充也就会有回收,TRIM方法便是用于删除可变数组中尾部元素,并回收存储空间。

  • TRIM从集合的末尾删除一个元素。

  • TRIM(n)从集合的末尾删除n个元素。

Halo:


Oracle:


4.8、DELETE

DELETE方法在可变数组中用于删除全部的元素。等价于 n.TRIM(n.COUNT);

  • DELETE从集合中删除所有元素。

Halo:


Oracle:



五、全局可变数组类型

全局可变数组类型可用作函数/存储过程参数或表字段类型。

Halo:


Oracle:



六、声明

若文中存在错误或不当之处,敬请指出,以便我进行修正和完善。希望这篇文章能够帮助到各位。

文中相关测试内容基础环境为羲和(halo)数据库16版本Oracle模式(已创建拓展)和 Oracle19c。 如需获取同样的体验,敬请期待后续16版本公测。

文章转载请联系,谢谢合作。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70036312/viewspace-3040104/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
postgres爱好者、openHalo维护者、MonetDB_fdw作者、pg_duckdb、IvorySQL等等诸多开源项目贡献者,个人公众号「包里装着个卡比兽」。不忙的时候会写点文章分享在技术方面的见解。

注册时间:2024-01-02

  • 博文量
    22
  • 访问量
    18471