南大通用GBase 8s记录类型

43 阅读3分钟

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

本文将讨论GBase 8s中记录类型的特点、使用场景以及实际应用,希望能帮助开发者更好地理解和运用这一功能。

在GBase 8s的PL/SQL编程模式下,记录类型是一种非常重要的数据结构,它允许开发者定义包含多个字段的复合数据类型。这种类型的数据结构在处理复杂数据时非常灵活,能够有效地提高代码的可读性和可维护性。

要使用PL/SQL语法,需要显式设置环境变量  SQLMODE  为  ORACLE  。默认情况下,GBase 8s的  SQLMODE  为  GBASE  ,此时不支持PL/SQL语法。因此,在开始编写PL/SQL代码之前,请确保已经正确设置了环境变量。  

语法

TYPE record_type IS RECORD  ( field_definition [, field_definition]... );
field_definition ::=   field datatype [ [ NOT NULL ] { := | DEFAULT } expression ]

创建记录类型

  • 记录类型可以在匿名块中定义,仅在块中生效
  • 记录类型可以在包中定义公有类型,全局生效
  • 不可以在外部create type

创建记录变量的方式

  • 定义一个RECORD类型,然后声明该类型的变量。
  • 使用%ROWTYPE声明一个记录变量,该变量表示数据库表或视图的完整或部分行。
  • 使用%TYPE声明与之前声明的记录变量类型相同的记录变量。

记录类型变量的初始值

  • 对于RECORD类型的记录变量,每个字段的初始值为NULL,除非您在定义类型时为其指定不同的初始值。
  •  对于用%ROWTYPE或%TYPE声明的记录变量,每个字段的初始值为NULL。该变量不继承引用项的初始值。

记录类型的应用

1) 声明始终代表全行的记录变量。

variable_name table_or_view_name%ROWTYPE;

注:表中包含虚拟列时,无法直接将记录变量值插入到表中,需要将不包含虚拟列的单个字段插入。表中包含不可见列时,%rowtype获得的列不包含该列。

2)声明始终代表部分行的记录变量。

variable_name cursor%ROWTYPE;

3)变量赋值:同一类型,不同变量间可以赋值。

name1:=name2;

4)%rowtype和record变量可以相互赋值。

5)使用select into将行分配给记录变量。

SELECT select_list INTO record_variable_name FROM table_or_view_name;

6)使用fetch将行分配给记录变量。

FETCH cursor INTO record_variable_name;

7)使用SQL语句返回PLSQL记录类型变量的值。

SELECT select_list INTO record_variable_name FROM table_or_view_name;

8)将NULL分配给记录变量,会将null分配给变量的每个field。

 

场景举例

set environment sqlmode ‘oracle’;
set serveroutput on;

create table dept(id int,name varchar2(30),mgr_id int,loc_id int);
insert into dept values(1,'Tom',100,1000);

Declare
CURSOR c1 IS select id,name from dept;
TYPE DeptRecTyp IS RECORD (
       dept_id    int NOT NULL := 10,
       dept_name  VARCHAR2(30) NOT NULL := 'Administration',
       mgr_id     int := 200,
       loc_id     int := 1700
   );
dept_rec  DeptRecTyp;
rec_var1  dept%rowtype;
rec_var2  dept.name%type;
rec_var3  c1%rowtype;

BEGIN
open c1;
fetch c1 into rec_var3;
dbms_output.put_line(rec_var3.id||rec_var3.name);
close c1;

dbms_output.put_line(dept_rec.mgr_id);

rec_var1.loc_id:=2000;
dbms_output.put_line(rec_var1.loc_id);
END;
/

运行结果:

1Tom
0
2000

GBase 8s的记录类型为开发者提供了一种灵活的数据结构,能够有效地简化复杂数据的处理过程。通过本文的介绍,希望读者对记录类型有更深入的理解。在实际开发中,合理运用记录类型可以提高代码的可读性和可维护性,同时也能提升开发效率。

如果您对GBase 8s的记录类型或其他功能有任何疑问或建议,欢迎随时与我们联系。我们将竭诚为您服务,共同推动数据库技术的发展。

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