南大通用GBase 8s数据库游标变量解析:提升数据库操作效率

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 南大通用GBase 8s 数据库游标变量解析:提升数据库操作效率

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

首先,游标变量和游标是两个不同的概念。与游标相似,游标变量是指向多行游标查询的结果集的当前行。游标是静态的,游标变量是动态的,同时游标变量并不参与与特定的查询绑定,所以可以为任何兼容的查询打开游标变量,从而提高灵活性。

游标变量的特点
一个游标变量非常像一个显式游标。但也有自己的特性:

游标变量不限于一个查询 。
可以给游标变量赋值 。
可以在表达式中使用游标变量 。
可以作为子程序的参数,可以使用游标变量在子程序之间传递结果集。只限于SYS_REFCURSOR 。
不能接收参数,查询能够包括变量。
创建游标变量
创建游标变量:

定义游标类型,然后声明该类型的变量。
声明SYS_REFCURSOR的变量,一个游标变量被称为REF CURSOR(引用游标)。
REF CURSOR类型基本的语句定义:

TYPE type_name IS REF CURSOR [ RETURN return_type ]
如果指定了return_type,则定义的引用游标变量和声明该类型的变量就是强类型,否则为弱类型。SYS_REFCURSOR类型和他的变量都为弱类型。对于强类型的游标变量,可以把返回指定类型的查询和他关联。对于弱类型的游标变量,可以与任何查询关联。弱类型的引用游标可以互相转换,也可以与SYS_REFCURSOR互相转换。可以将一个强类型的游标变量赋值给一个弱类型的游标变量;只有当2个强类型游标变量具有相同的类型,可以进行赋值。

open for的说明
当其他OPEN FOR 语句使用游标变量时,可以重新打开该游标变量,无需关闭游标变量。重新打开游标变量后,之前与其关联的查询将丢失。当不再需要游标变量时,无须使用CLOSE语句将其关闭,会自动关闭。关闭游标变量后,无法从其结果集中获取数据或引用其属性。可以重新打开已关闭的游标变量。

fetch游标变量获取数据
打开游标变量后,可以使用FETCH语句获取查询结果集的行。

语法格式:

FETCH cursor_variable INTO into_clause
FETCH cursor_variable bulk_collect_into_clause [ LIMIT numeric_expression ]
参数说明:

1) into_clause是变量列表或单个记录变量。对于查询返回的每一列,变量列表或记录必须具有兼容的数据类型。

2) bulk_collect_into_clause 指定一个或多个集合,用于存储FETCH语句返回多行。LIMIT numeric_expression 限制FETCH语句一次检索的行数。FETCH语句检索结果集的当前行,将该行的值存储到变量或记录中,然后将光标前进到下一行。

游标变量的使用
用到的基础表:

create table t (id int, name varchar(10));
insert into t values(1,'Jerry');
insert into t values(2,'Jack');
游标变量声明
DECLARE
   TYPE tcurtyp IS REF CURSOR RETURN t%ROWTYPE;  -- 强游标类型
   TYPE genericcurtyp IS REF CURSOR;               --弱游标类型
   cursor1   tcurtyp;       -- 强游标变量
   cursor2   genericcurtyp;   -- 弱游标变量
   my_cursor SYS_REFCURSOR;  -- 弱游标变量
BEGIN
   NULL;
END;
/

与动态sql结合使用

declare  
   cv SYS_REFCURSOR;
   v_name varchar(10);
   query_1 varchar(200) := 'select name from t';
begin
   open cv for query_1;
   fetch cv into v_name;
    dbms_output.put_line('name = '||v_name);
end;
/

fetch游标到记录类型

declare
   TYPE ty_1 IS REF CURSOR;
   v1 t.id%type;
   v2 t.name%type;
   cursor1 ty_1;
begin
open cursor1 for select * from t;
loop
   fetch cursor1 into v1,v2;
exit when cursor1%notfound;
dbms_output.put_line('id = '||v1||', name = '||v2);
end loop;
close cursor1;    
end;
/

作为存储过程的出入参
注意:只有SYS_REFCURSOR游标变量支持。REF CURSOR不支持。

--当声明一个游标变量作为打开游标变量子程序的参数时 , 必须定义 IN OUT 模式 . 也就是说 , 子程序可以将一个打开的游标变量传递给调用者 。

CREATE OR REPLACE PACKAGE t_data AS
   PROCEDURE open_t_cv (t_cv IN OUT SYS_REFCURSOR);
END t_data;
/

CREATE OR REPLACE PACKAGE BODY t_data AS
   PROCEDURE open_t_cv (t_cv IN OUT SYS_REFCURSOR) IS
   BEGIN
       OPEN t_cv FOR SELECT * FROM t;
   END open_t_cv;
END t_data;
/

游标变量是GBase 8s数据库系统中一个特性,它不仅提高了数据库操作的灵活性和效率,还为开发者提供了更多的编程选项。通过本文的深入解析,我们希望您能够更好地理解和利用游标变量,以提升您的数据库编程技能。如果您对GBase 8s游标变量有更深入的需求或疑问,欢迎继续探索和咨询,我们将为您提供更多的支持和资源。

相关文章
|
12天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
28天前
|
Linux 数据库 数据安全/隐私保护
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
|
28天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
28天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
29天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
28天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
28天前
|
SQL 数据库
gbase 8a 数据库 shm满导致gclusterd进程异常
gbase 8a 数据库 shm满导致gclusterd进程异常
|
28天前
|
网络安全 数据库
gbase 8a 数据库 安装8ampp 常见ssh报错问题
gbase 8a 数据库 安装8ampp 常见ssh报错问题
|
29天前
|
存储 机器学习/深度学习 监控
南大通用GBase 8s数据库onbar基础使用教程
数据备份与恢复是确保数据安全和业务连续性的关键。onbar作为GBase 8s数据库的备份工具,需配合存储管理器使用,通过配置BAR_BSALIB_PATH等参数,实现数据的备份与恢复。本文详细介绍了onbar的配置、备份、恢复及监控流程,帮助数据库管理员构建高效的数据保护方案。
|
29天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)

推荐镜像

更多