栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

炫“库”行动-人大金仓征文大赛—KingbaseES集合数据类型解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

炫“库”行动-人大金仓征文大赛—KingbaseES集合数据类型解析

KingbaseES PL/SQL 支持集合数据类型,集合数据类型也是一种复合数据类型,类似于编程语言中的数组。集合数据类型包括三种具体的类型:关联数组(Associative Array)、嵌套表(Nested Table)和可变数组(Varray)。

1 关联数组

1.1定义

关联数组(Associative Array):也称为索引表,是具有唯一键值的集合类型。

具有以下特性:

包含零或多个具有相同数据类型的元素;

用户可按键值检索;

键值可以是整型等数值类型,也可以是字符串等非数值类型;

键值连续且有序;

只能用于PL/SQL环境;

1.2 声明关联数组

语法定义如下:

TYPE assoc_type_name IS TABLE OF  element_type  [ NOT NULL ] INDEX BY index_type;

其中:

assoc_type_name :用户自定义关联数组名字

element_type:关联数组元素的数据类型,可以是标量数据类型,%type,%rowtype及用户自定义类型

index_type:关联数组索引数据类型,kingbase支持 INT | VARCHAR | VARCHAR2 | TEXT等类型

1.3示例

下面以具体的示例说明关联数组的使用:

set SQLTERM /
DECLARE
TYPE my_assoc_array_type1 IS TABLE OF varchar(20) INDEX BY varchar(20); --声明关联数组类型
var1 my_assoc_array_type1; --声明关联数组类型变量
i varchar(20);
BEGIN	
  --可关联数组变量赋值
var1('c1') :='kingbase';	
var1('c2') :='tianjin';	
--遍历关联数组每个元素值
i :=var1.first;	
WHILE i is not null LOOP		
DBMS_OUTPUT.PUT_LINE(var1(i));		
i :=var1.next(i);	
END LOOP;
END;
/

2 嵌套表

2.1 定义

嵌套表(Nested Table):像一个元素量任意的一维数组。

具有以下特点:

基于键-值对的集合类型;

与关联数组相比,它的键值只能为整型,即从1开始的连续值;

必须使用和其同名的构造函数进行初始化;

2.2声明嵌套表

可以通过type语句在plsql里声明嵌套表类型,语法如下:

TYPE nested_table_name IS TABLE OF  element_type  [ NOT NULL ];

其中:

nested_table_name :用户自定义嵌套表类型名字

element_type:嵌套表类型元素的数据类型,可以是标量数据类型,%type,%rowtype及用户自定义类型

也可以在通过create type语句在SQL层创建嵌套表类型,语法如下:

CREATE TYPE nested_table_name IS TABLE OF  element_type  [ NOT NULL ];

2.3示例

下面以具体的示例说明嵌套表类型的使用:

set SQLTERM /

DECLARE

TYPE my_nest_table_type1 IS TABLE OF VARCHAr(50); --声明嵌套表类型

var1 my_nest_table_type1 :=my_nest_table_type1(); --声明嵌套表类型变量,并通过构造函数进行初始化

i varchar(20);

BEGIN    

var1 :=my_nest_table_type1('kingbase','tianjin','beijing'); --赋值



--遍历嵌套表每个元素值  

FOR i IN 1..var1.count LOOP           

           DBMS_OUTPUT.PUT_LINE(var1(i));

END LOOP;      

END;

/

3 可变数组

3.1定义

可变数组(Varray):是一个varray数据类型的集合。

具有以下特点:

下标类型为INT且从1开始;

必须使用和其同名的构造函数进行初始化;

在以下方面与嵌套表不同;

可变数组在定义时需指定最大元素个数,且实际应用中不能超过该限制;

可变数组的下标必须连续;

删除元素时,可变数组不能使用delete(n)和delete(m,n)方法,但可使用delete()方法(即删除所有元素)

3.2 声明可变数组

可以通过type语句在plsql里声明可变数组类型,语法如下:

TYPE varray_type_name IS VARRAY(size_limit) OF  element_type [ NOT NULL ];

其中:

varray_type_name :用户自定义可变数组类型名字

size_limit: 可变数组最大元素个数,使用中不能超过该限制

element_type:可变数组类型元素的数据类型,可以是标量数据类型,%type,%rowtype及用户自定义类型

也可以在通过create type语句在SQL层创建可变数组类型,语法如下:

CREATE TYPE varray_type_name IS VARRAY(size_limit) OF  element_type [ NOT NULL ];

3.3示例

下面以具体的示例说明可变数组类型的使用:

set SQLTERM /

DECLARE

TYPE my_nest_table_type1 IS VARRAY(10) OF VARCHAr(50); --声明可变数组类型

var1 my_nest_table_type1 := my_nest_table_type1(); --声明可变数组类型变量,并通过构造函数进行初始化

i varchar(20);

BEGIN  

var1 :=my_nest_table_type1('kingbase','tianjin','beijing'); --赋值

--遍历可变数组每个元素值

FOR i IN 1..var1.count LOOP   

   DBMS_OUTPUT.PUT_LINE(var1(i));

END LOOP;

END;

/

4.集合方法

4.1集合方法简介

常用的集合方法参见下表,其中extend、trim、exists仅嵌套表和可变数组类型支持。

方法名

说明

用法

count

返回集合数据类型变量中当前的元素数

count | count()

first

返回变量的第一个索引值

first | first()

last

返回变量的最后一个索引值

last | last()

prior

返回指定索引的前一个索引值

prior(index)

next

返回指定索引的后一个索引值

next(index)

delete

从集合数据类型变量中删除元素

delete | delete(),delete(index), delete(index1, index2)

limit

返回可变数组中定义的最大元素数限制

limit | limit()

extend

在集合变量末尾扩展元

extend | extend(),extend(num), extend(num, index)

trim

从变量末尾开始删除元素

trim | trim(),trim(num),

exists

判断变量中指定索引元素是否存在,并返回Boolean 值

exists(index)

4.2集合方法示例

1.first、last方法示例

set SQLTERM /

DECLARE

       TYPE my_type IS TABLE OF INT INDEX BY VARCHAr(10);

       a my_type;

BEGIN

       IF a.first() IS NULL THEN

              DBMS_OUTPUT.PUT_LINE( 'There is no first element. ');

       END IF;



       a('no1') := 10;

       a('no2') := 20;

       a('no3') := 30;

       a('no4') := 40;



       DBMS_OUTPUT.PUT_LINE( 'First index is ' || a.first());

    DBMS_OUTPUT.PUT_LINE( 'Last index is ' || a.last);

END;

/

2. count、prior、next方法示例

set SQLTERM /

DECLARE

       TYPE my_type IS TABLE OF INT INDEX BY PLS_INTEGER;

       a my_type;

       i int := 0;

BEGIN

       a(1) := 10;

       a(2) := 20;

       a(3) := 30;

       DBMS_OUTPUT.PUT_LINE('Total elements of a : ' || a.count());

       i := a.first();

       WHILE i IS NOT NULL LOOP

              DBMS_OUTPUT.PUT_LINE( 'a('|| i || ') is ' || a(i));

              i := a.next(i);

       END LOOP;

       i := a.last();

       WHILE i IS NOT NULL LOOP

              DBMS_OUTPUT.PUT_LINE ('a('|| i || ') is ' || a(i));

              i := a.prior(i);

       END LOOP;

END;

/

 

3. delete方法示例

set SQLTERM /

DECLARE

       TYPE my_type IS TABLE OF VARCHAr2(10) INDEX BY PLS_INTEGER;

       a my_type;

BEGIN

       a(1) := 'aaa';

       a(2) := 'bbb';

       a(3) := 'ccc';



       a.delete(3);

       a.delete(1);

       DBMS_OUTPUT.PUT_LINE ('Total elements of a : ' || a.count);



       a.delete();

       DBMS_OUTPUT.PUT_LINE( 'Total elements of a : ' || a.count);

END;

/

 

【本文正在参与炫“库”行动-人大金仓有奖征文】

活动链接:https://bss.csdn.net/m/topic/kingbase

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322761.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号