高端网站开发报价,广安发展建设集团门户网站,响应式网站手机端尺寸,seo优化行业文章目录 背景集合类型可变数组可变数组示例 背景
在信创适配中#xff0c;从Oracle迁移过来的存储过程使用到可变数组。因此在LightDB-X 23.4版本中对现有的集合类型进行了增强#xff0c;添加了可变数组类型。
集合类型
在LightDB-X 23.4版本开始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.
count3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count0
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.
count3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count0f_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.
count3
ids(1) name is zhangsan
ids(2) name is lisi
ids(3) name is wangwu
after is.delete, count0
CALL