原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
GBase 8s兼容oracle的PL/SQL编程语言,PL/SQL 语法需要显式设置环境变量SQLMODE为’ORACLE’后才能生效,默认情况下8s的SQLMODE为’GBASE’,此时不支持 PL/SQL 语法。本文将介绍GBase 8s兼容oracle模式中的关联数组类型,包括它们的使用场景、特点以及如何有效利用它们来提高数据库操作的效率。
兼容oracle的集合类型包括三种,分别是关联数组类型、变长数组类型、嵌套表类型,本文主要讲述关联数组类型及其变量的使用。关联数组的元素数量未指定,索引类型可以为字符串或者PLS_INTEGER,可以在PLSQL块中或者包中进行定义。
关联数组是一组键值对,每个键都是一个唯一的索引,用于定位与语法variable_name(index)相关联的值。
1.语法
type population is table of int index by varchar(10);
2.特点
- 索引的数据类型可以是字符串类型(VARCHAR2、VARCHAR、string或LONG)或PLS_INTEGER。
- 索引是按排序顺序存储的,而不是按创建顺序存储的。对于字符串类型,排序顺序由初始化参数NLS_sort和NLS_COMP决定。
- 不需要初始化。
3.与数据库表的不同点:
- 关联数组不需要磁盘空间或网络操作
- 关联数组无法使用dml语言进行操作
4.关联数组的比较
- 不能与NULL进行比较
- 不支持变量直接比较:v1=v2
- 只支持变量元素比较:v1(1)=v2(1)
5.示例
DECLARE
TYPE type_1 IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
v1 type_1;
i VARCHAR2(64);
BEGIN
v1('Smallville') := 2000;
v1('Midland') := 750000;
v1('Megalopolis') := 1000000;
v1('Smallville') := 2001;
i := v1.first;
while i is not null loop
dbms_output.put_line('values of ' || i || ' is ' || v1(i));
i := v1.next(i);
end loop;
end;
/
运行结果:
Population of Megalopolis is 1000000
Population of Midland is 750000
Population of Smallville is 2001
--关联数组类型和嵌套表类型作为存储过程的out参数,并应用在package中
drop table if exists tab1;
create table tab1(id int,name varchar(10));
create or replace package pkg1 as
type t1 is table of tab1.id%type;
type t2 is table of tab1.name%type index by varchar(5);
procedure p1(c out t1);
procedure p2(c out t2);
end;
/
create or replace package body pkg1 as
procedure p1 (c out t1) is
a tab1%rowtype;
-- c t1 := t1(100,200);
begin
c := t1(100,200);
end;
procedure p2 (c out t2) is
a tab1%rowtype;
begin
c ('var') := 'Jack';
end;
end;
/
--调用嵌套表作为out参数的procedure
declare
b pkg1.t1:=pkg1.t1(10,20);
begin
pkg1.p1(b);
dbms_output.put_line(b(1));
end;
/
100
--调用关联数组作为out参数的procedure
declare
c pkg1.t2;
begin
pkg1.p2(c);
dbms_output.put_line(c('var'));
end;
/
Jack
通过本文的介绍GBase 8s 中关联数组的使用方法、特点及其在 PL/SQL 编程中的应用。关联数组提供了一种灵活的方式来存储和操作一组键值对,适用于多种场景。希望这些内容能帮助你在实际开发中更高效地利用关联数组。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。