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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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游标变量有更深入的需求或疑问,欢迎继续探索和咨询,我们将为您提供更多的支持和资源。

相关文章
|
16天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
19天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
11天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
9天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
23天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
4天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
1056 8
|
8天前
|
云安全 人工智能 自然语言处理
|
5天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
411 4
|
6天前
|
云安全 存储 弹性计算
|
5天前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
【最新版正确姿势】Docker安装教程(简单几步即可完成)