• LightDB中的存储过程(六)


    LightDB支持存储过程,除了支持Postgres的plpgsql存储过程,还兼容Oracle的存储过程,新增了plorasql过程语言。上一篇中我们介绍了存储过程中的记录类型,这一篇主要讲述存储过程中的集合类型。

    什么是集合类型呢?

    前面我们讲过,PL/SQL支持两种复合数据类型:集合类型和记录类型。他们的区别是:集合类型中所有内部组件具有相同的数据类型,而记录类型内部组件可以具有不同的数据类型。关于记录类型,可参考文章LightDB中的存储过程(五),本文重点讲述集合类型。

    集合类型类似于其他高级语言中的数组,是相同类型元素的集合。PL/SQL中的集合类型分为联合数组类型(Associative Array)、嵌套表类型(Nested Table)和可变数组类型(Variable-Size Array)三种。

    • 联合数组: 又称索引表,通过数字或字符串作为下标来查找集合中的元素,元素数量不限。
    • 嵌套表:与联合数组类似,使用有序数字作为元素下标,元素最大数量不限。
    • 可变数组: 使用有序数字作为元素下标,元素的最大数量在定义时确定。

    联合数组

    联合数组,又称索引表,是键值对的集合,每个键是唯一的索引值,没有固定的上下限,即元素的个数是不受限制的。而且其索引值可以是无序的。索引值类型可以是字符类型也可以是数字类型。举个例子:

    create or replace procedure shenlan
    as
    declare
    	type mytype is table of int index by integer;  -- 在存储过程中声明一个联合数组类型
    	v mytype;
    begin	
    	select id bulk collect  into v from mystudent where rownum < 5;
    	raise notice '%', v(1);
    end;
    /
    
    drop procedure shenlan;  -- 同时会删掉类型mytype
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    联合数组可使用下标访问,举个例子:

    create or replace procedure shenlan
    as
    declare
    	type mytype is table of int index by integer;  -- 在存储过程中声明一个联合数组类型
    	v mytype;
    begin	
    	select id bulk collect  into v from mystudent where rownum < 5;
    	for i in 1..4 loop
    		raise notice '%', v(i);		-- 通过下标访问联合数组
    	end loop;
    end;
    /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    嵌套表、可变数组

    嵌套表和可变数组,目前暂不支持,后续版本会支持。

    更多请参考LightDB官网

  • 相关阅读:
    Kotlin协程:异常处理机制
    InfiniBand 的前世今生
    Javascript方法call、apply、bind的解析与实现
    chatgpt技术总结(包括transformer,注意力机制,迁移学习,Ray,TensorFlow,Pytorch)
    LC-2216. 美化数组的最少删除数(贪心(脑经急转弯))
    【面经】讲一下spring aop
    Mysql安装详细教程
    设计模式之外观模式
    网易严选,使用uni-app实现,包含后台数据文件
    前端小游戏——植物大战僵尸
  • 原文地址:https://blog.csdn.net/s_lisheng/article/details/126118404