南大通用GBase8s集合类型之嵌套表介绍

0 阅读2分钟

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

GBase 8s兼容oracle的PL/SQL编程语言,PL/SQL 语法需要显式设置环境变量SQLMODE为’ORACLE’后才能生效,默认情况下8s的SQLMODE为’GBASE’,此时不支持 PL/SQL 语法。本文将介绍GBase 8s兼容oracle模式中的谦套表类型,包括它们的使用场景、特点以及如何有效利用它们来提高数据库操作的效率。

兼容oracle的集合类型包括三种,分别是关联数组类型、变长数组类型、嵌套表类型,本文主要讲述嵌套表类型及其变量的使用。嵌套表的元素数量是未指定的,索引类型为整数,可以在plsql块中定义,也可以作为独立的数据类型定义。

嵌套表是一种列类型,不按特定顺序存储未指定的行。

1.语法

(1)TYPE type_name IS TABLE OF datatype; 
(2)CREATE TYPE type_name IS TABLE OF datatype;

 

2.特点

(1)必须先初始化
(2)不按照特定顺序存储
(3)索引从1开始
(4)嵌套表变量占用的内存量可以随着添加或删除元素而动态增加或减少。

3.示例


--嵌套类型为record类型,使用record变量为其赋值
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%rowtype; --嵌套表
   type t2 is table of tab1%rowtype 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;
   begin
       a.id := 10;
       a.name := 'Jerry';
       c := t1(a);
   end;
   
   procedure p2 (c out t2) is
       a tab1%rowtype;
   begin
       a.id := 20;
       a.name := 'Tom';
       c ('var') := a;
   end;
end;
/

 

--调用嵌套表作为out参数的procedure
declare
   a tab1%rowtype;
   b pkg1.t1 := pkg1.t1(a);
begin
   pkg1.p1(b);
   dbms_output.put_line(b(1).id);
   dbms_output.put_line(b(1).name);
end;
/

10 
Jerry

--调用关联数组作为out参数的procedure
declare
   c pkg1.t2;
begin
   pkg1.p2(c);
   dbms_output.put_line(c('var').id);
   dbms_output.put_line(c('var').name);
end;
/

20
Tom

本文了 GBase 8s 中嵌套表的使用方法、特点及其在 PL/SQL 编程中的应用。嵌套表提供了一种灵活的方式来存储和操作一组具有相同数据类型的元素,适用于多种场景。希望这些内容能帮助你在实际开发中更高效地利用嵌套表。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!

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