南大通用GBase 8s 之集合属性

11 阅读5分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

GBase 8s 提供了一系列集合属性和方法,用于操作和管理集合变量。本文将详细介绍 GBase 8s 中集合属性的使用方法,并通过实际示例展示其应用。

集合属性简介

GBase 8s 提供了多种集合属性,用于操作和管理集合变量。这些属性包括:

  • count() :返回集合变量的元素总个数。
  •  limit() :返回变长数组中允许出现的最大下标值。
  •  exist() :确定指定下标对应的集合元素是否存在。
  •  first() :返回集合中第一个元素的下标值。
  •  last() :返回集合中最后一个元素的下标值。
  •  next() :返回集合中当前元素的后一个元素的下标值。
  •  prior() :返回集合中当前元素的前一个元素的下标值。

这些属性的使用场景和具体功能如下。

集合属性的使用示例

1.  count()  属性

 count()  属性返回集合变量的元素总个数,返回类型为  pls_integer 。

示例:

定义联合数组类型  sname_tab_type  及其变量  sname_tab ,通过游标使变量  sname_tab  元素依次获得计算机专业学生姓名,最后获得学生总数。

DECLARE
   TYPE sname_tab_type IS TABLE OF students.name%TYPE INDEX BY BINARY_INTEGER;
   sname_tab sname_tab_type;
   i INT := 1;
BEGIN
   FOR student_record IN (SELECT name FROM students WHERE specialty = '计算机') LOOP
       sname_tab(i) := student_record.name; -- 依次获得计算机专业学生姓名
       i := i + 1;
   END LOOP;
   DBMS_OUTPUT.PUT_LINE('计算机专业共有学生总数: ' || sname_tab.COUNT || ' 名。');
END;
   

输出:
计算机专业共有学生总数: 5 名。

2.  limit()  属性

 limit()  属性返回变长数组中允许出现的最大下标值,返回类型为  pls_integer 。

示例:

定义变长数组类型  sname_varry_type  及其变量  sname_varry  并初始化赋值,通过  limit()  属性获得变量  sname_varry  的最大下标值,通过  count()  属性获得变量  sname_varry  的元素个数。

DECLARE
   TYPE sname_varry_type IS VARRAY(15) OF students.name%TYPE;
   sname_varry sname_varry_type := sname_varry_type('王一', '李二', '张三');
BEGIN
   DBMS_OUTPUT.PUT_LINE('集合(varry)变量的最大下标值: ' || sname_varry.LIMIT);
   DBMS_OUTPUT.PUT_LINE('集合(varry)变量的元素个数: ' || sname_varry.COUNT);
END;
   

输出:
集合(varry)变量的最大下标值: 15
集合(varry)变量的元素个数: 3

3.  exist()  属性

 exist()  属性需要一个形参,即集合中元素的下标,用于确定该下标对应的集合元素是否存在。存在返回  true ,不存在返回  false 。

示例:

定义嵌套表类型  sname_tab_type  及其变量  sname_tab ,使用  exist()  属性判断  sname_tab  的第一个元素是否存在,存在说明变量  sname_tab  已初始化,执行空操作再执行其他操作;不存在说明未初始化,初始化后再执行其他操作。

DECLARE
   TYPE sname_tab_type IS TABLE OF VARCHAR2(10);
   sname_tab sname_tab_type;
   v_id students.student_id%TYPE;
BEGIN
   v_id := &student_id;
   IF sname_tab.EXIST(1) THEN
       -- 使用属性 exist 判断 sname_tab 的第一个元素是否存在
       NULL;
   ELSE
       sname_tab := sname_tab_type('王一', '李二', '张三');
   END IF;
   SELECT name INTO sname_tab(1) FROM students WHERE student_id = v_id;
   DBMS_OUTPUT.PUT_LINE('学生姓名: ' || sname_tab(1));
END;

4.  first()  和  last()  属性

 first()  属性返回集合中第一个元素的下标值, last()  属性返回集合中最后一个元素的下标值。下标值可以是数字或字符类型(如  VARCHAR2  或  LONG )。

示例:

定义联合数组类型  sname_tab_type  及其变量  sname_tab ,通过变量  sname_tab  依次获得计算机专业的学生姓名,通过  first() 、 count()  和  last()  属性分别获得第一个元素下标、元素总数和最后一个元素下标。

DECLARE
   TYPE sname_tab_type IS TABLE OF students.name%TYPE INDEX BY BINARY_INTEGER;
   sname_tab sname_tab_type;
   i INT := -10;
BEGIN
   FOR student_record IN (SELECT name FROM students WHERE specialty = '计算机') LOOP
       sname_tab(i) := student_record.name;
       i := i + 10;
   END LOOP;
   DBMS_OUTPUT.PUT_LINE('第一个元素下标为: ' || sname_tab.FIRST);
   DBMS_OUTPUT.PUT_LINE('sname_tab 中元素个数: ' || sname_tab.COUNT);
   DBMS_OUTPUT.PUT_LINE('最后一个元素下标为: ' || sname_tab.LAST);
END;

输出:
第一个元素下标为: -10
sname_tab 中元素个数: 5
最后一个元素下标为: 30

5.  next()  和  prior()  属性

 next()  属性返回集合中当前元素的后一个元素的下标值,后一个元素不存在返回  null 。 prior()  属性返回集合中当前元素的前一个元素的下标值,前一个元素不存在返回  null 。下标值可以是数字或字符类型(如  VARCHAR2  或  LONG )。

示例:

定义联合数组类型  sname_tab_type  及其变量  sname_tab ,通过游标使变量  sname_tab  元素依次获得计算机专业学生姓名,最后通过变量  sname_tab  的  first()  和  next()  属性循环显示计算机专业学生姓名。

DECLARE
   TYPE sname_tab_type IS TABLE OF students.name%TYPE INDEX BY BINARY_INTEGER;
   sname_tab sname_tab_type;
   i INT := -10;
   counter INT;
BEGIN
   FOR student_record IN (SELECT name FROM students WHERE specialty = '计算机') LOOP
       sname_tab(i) := student_record.name;
       i := i + 10;
   END LOOP;
   counter := sname_tab.FIRST;
   WHILE counter <= sname_tab.LAST LOOP
       DBMS_OUTPUT.PUT_LINE('sname_tab(' || counter || ') = ' || sname_tab(counter));
       counter := sname_tab.NEXT(counter);
   END LOOP;
END;

输出:
sname_tab(-10) = 姓名1
sname_tab(0) = 姓名2
sname_tab(10) = 姓名3
sname_tab(20) = 姓名4
sname_tab(30) = 姓名5

通过本文的介绍,你已经了解了 GBase 8s 中集合属性的使用方法,包括  count() 、 limit() 、 exist() 、 first() 、 last() 、 next()  和  prior() 。这些属性为操作和管理集合变量提供了强大的支持,使代码更加简洁和高效。希望这些内容能帮助你在实际开发中更好地利用集合类型。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。