当前位置: 首页 > news >正文

lightdb plorasql集合类型新增可变数组

文章目录

  • 背景
  • 集合类型
  • 可变数组
  • 可变数组示例

背景

在信创适配中,从Oracle迁移过来的存储过程使用到可变数组。因此在LightDB-X 23.4版本中对现有的集合类型进行了增强,添加了可变数组类型。

集合类型

在LightDB-X 23.4版本开始plorasql支持的集合类型同Oracle一致,覆盖了关联数组,可变数组和嵌套表三种类型,支持的方法如下

  • DELETE 从集合中删除元素。
  • EXTEND 将元素添加到集合的末尾。
  • EXISTS 如果集合的指定元素存在,则返回TRUE。
  • FIRST 返回集合中的第一个索引。
  • LAST 返回集合中的最后一个索引。
  • COUNT 返回集合中的元素数量。

可变数组

可变大小数组是一个数组,其元素数量可以从零(空)到声明的最大大小不等,在这里超过也支持。

要访问可变数组的元素,使用语法variable_name(index)。在数据库中存储和检索可变数组时,其索引和元素顺序将保持稳定。

随着您添加或删除元素,可变数组变量占用的内存量可以动态增加或减少。

目前只支持本地类型的可变数组,不支持全局可变数组。

可变数组示例

准备数据

select dbms_output.serveroutput(true);
create table user_info(id int, name varchar(30));
insert into user_info values( 11, 'zhangsan');
insert into user_info values( 21, 'lisi');
insert into user_info values( 31, 'wangwu');

匿名块

declaretype id_array is varray(10) of INTEGER;ids id_array := id_array(11, 21);v_name varchar2(30);
beginif ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;ids.extend;ids(ids.count) := 31;if ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;dbms_output.put_line('count=' || ids.count);for i in ids.first .. ids.last loopselect name into v_name from user_info where id = ids(i);dbms_output.put_line('ids(' || i || ') name is ' || v_name);end loop;ids.delete;dbms_output.put_line('after is.delete, count=' || ids.count);
end;
/ids(3) not exists.
ids(3) exists.
count=3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count=0
DO

函数

create or replace function f_varray() return int istype id_array is varray(10) of INTEGER;ids id_array := id_array(11, 21);v_name varchar2(30);
beginif ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;ids.extend;ids(ids.count) := 31;if ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;dbms_output.put_line('count=' || ids.count);for i in ids.first .. ids.last loopselect name into v_name from user_info where id = ids(i);dbms_output.put_line('ids(' || i || ') name is ' || v_name);end loop;ids.delete;dbms_output.put_line('after is.delete, count=' || ids.count);return ids.count;
end;
/select f_varray();ids(3) not exists.
ids(3) exists.
count=3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count=0f_varray 
----------0
(1 row)

存储过程

create or replace procedure p_varray() istype id_array is varray(10) of INTEGER;ids id_array := id_array(11, 21);v_name varchar2(30);
beginif ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;ids.extend;ids(ids.count) := 31;if ids.exists(3) thendbms_output.put_line('ids(3) exists.');elsedbms_output.put_line('ids(3) not exists.');end if;dbms_output.put_line('count=' || ids.count);for i in ids.first .. ids.last loopselect name into v_name from user_info where id = ids(i);dbms_output.put_line('ids(' || i || ') name is ' || v_name);end loop;ids.delete;dbms_output.put_line('after is.delete, count=' || ids.count);
end;
/call p_varray();ids(3) not exists.
ids(3) exists.
count=3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count=0
CALL
http://www.lryc.cn/news/256539.html

相关文章:

  • 算法--最短路
  • Linux 定时任务备份MySQL数据库
  • 查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
  • 外观模式 rust和java的实现
  • uniapp-hubildx配置
  • Nginx基础篇:Nginx搭建、Nginx反向代理、文件服务器部署配置。
  • 什么是TDR(威胁检测与响应)
  • 30、pytest入门内容回顾
  • 2023年 - 我的程序员之旅和成长故事
  • JMH性能测试
  • 超完整的mysql安装配置方法(包含idea和navicat连接mysql,并实现建表)
  • 通过仿真理解完整的阵列信号噪声模型
  • 问题:数组对象去重
  • 前端:让一个div悬浮在另一个div之上
  • 千锋 Vue 详细笔记整理
  • uniapp实战 —— 骨架屏
  • 【数据仓库-10】-- 数据仓库、数据湖和湖仓一体对比
  • 单臂路由与三层交换机
  • 免费的数据采集软件,最新免费的几款数据采集软件【2024】
  • nodejs微信小程序+python+PHP北京地铁票务APP-计算机毕业设计推荐 -安卓
  • zabbix 进阶
  • 【性能测试】Jmeter 配置元件(一):计数器
  • 使用Dockerfile Maven Plugin 将Docker镜像Push到AWS ECR (Elastic Container Registry)
  • ubuntu 20.04.6 server 服务器 下载与安装(配置静态IP)
  • [Linux] Apache的配置与运用
  • PHP基础 - 注释变量
  • 【图论笔记】克鲁斯卡尔算法(Kruskal)求最小生成树
  • oops-framework框架 之 多语言设置文本、精灵和骨骼动画
  • 阿里云SLB的使用总结
  • Python-pdf工具自制(合并、拆分、删除)