GaussDB数据库SQL系列-游标管理

news/2024/11/30 14:53:15/文章来源:https://www.cnblogs.com/xiaoxu0211/p/18567875

一、前言
在数据库中,游标(cursor)是一种非常重要的工具,用于在数据库查询结果集中进行定位和操作。游标提供了一种在多行数据结果集中逐行处理每一行的机制,允许开发人员对每一行的数据进行操作,如检索、过滤、修改等。本文将结合GaussDB数据库,简单的给大家做一介绍。

二、概述(GaussDB)
1、游标概述
在GaussDB数据库中,为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。

2、游标的使用分类
游标的使用分为显式游标和隐式游标。对于不同的SQL语句,游标的使用情况不同。

序号

SQL语句

游标

1

结果是多行的查询语句

显式的

2

非查询语句

隐式的

3

结果是单行的查询语句

隐式 / 显式

显式游标:显式游标主要用于对查询语句的处理,尤其是在查询结果为多条记录的情况下。
隐式游标:对于非查询语句,如修改、删除操作,则由系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名称为SQL,这是由系统定义的。
游标循环:游标在WHILE语句、LOOP语句中的使用称为游标循环,一般这种循环都需要使用OPEN、FETCH和CLOSE语句。
三、GaussDB中的显式游标(示例)
1、显式游标的使用与操作步骤

第一步,定义(声明)游标:定义一个游标名,以及与其相对应的SELECT语句。
第二步,打开游标:执行游标所对应的SELECT语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN语句还将锁定数据库表中游标结果集合对应的数据行。
第三步,提取游标数据:检索结果集合中的数据行,放入指定的输出变量中。
第四步,对该记录进行处理。
第五步,继续处理,直到活动集合中没有记录。
第六步,关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH语句获取其中数据。关闭后的游标可以使用OPEN语句重新打开。
2、显式游标示例

--给工资大于等于20000的员工降薪500。
--复制一张测试表
CREATE TABLE company2 AS TABLE company1;CREATE OR REPLACE PROCEDURE cursor_p()
AS
DECLAREv_id  NUMBER(6);v_salary    NUMBER(8,2);CURSOR c1 IS SELECT id, salary FROM company2; 
BEGINOPEN c1;LOOPFETCH c1 INTO v_id, v_salary;EXIT WHEN c1%NOTFOUND; IF v_salary>=20000 THENUPDATE company2 SET salary =salary - 500 WHERE id = v_id;END IF;END LOOP;CLOSE c1;
END; 
/--执行存储过程
CALL cursor_p();--查看,比对结果变化
SELECT t2.*,t1.salary as "降薪前" FROM company2 t2 LEFT JOIN company1 t1 ON t2.id=t1.id ORDER BY ID ASC;

游标属性说明:

%NOTFOUND是游标的属性之一,用于控制程序流程或者了解程序的状态。此处的意思是,当最近的DML(数据操作语言)操作(如INSERT,UPDATE,DELETE等)没有影响任何行时,该属性为真。也就是说,如果对表执行的操作没有找到任何匹配的行,那么这个属性就会为真,'EXIT WHEN c1%NOTFOUND;' 就会执行。

执行结果:
在这里插入图片描述

四、GaussDB中的隐式游标(示例)
1、隐式游标简介
对于隐式游标的操作,如定义、打开、取值及关闭操作,都由系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是最新处理的一条SQL语句所包含的数据,与用户自定义的显式游标无关。

2、隐式游标示例

--创建临时表,删除已离职的员工Allen,如果Allen已经不存在,则新增一条新员工信息(重名)
CREATE TABLE company3 AS TABLE company1;CREATE OR REPLACE PROCEDURE cursor_p1() 
AS DECLAREv_name VARCHAR(10) := 'Allen';BEGINDELETE FROM company3 WHERE name = v_name;--根据游标状态做进一步处理IF SQL%NOTFOUND THENINSERT INTO company3 VALUES(4,v_name,24,'China',30000);END IF;END;
/--执行
CALL cursor_p1();--查看,比对执行结果
SELECT *, 'company1' as "company1" FROM company1 WHERE NAME ='Allen'
union all  
SELECT *, 'company3' as "company3" FROM company3 WHERE NAME ='Allen'

游标属性说明:

SQL%NOTFOUND 是GaussDB数据库中的一个属性,用于检查最近的 SQL 语句是否对数据库没有任何影响。如果 SQL 语句没有找到任何匹配的记录,那么这个属性就为真。所以,本段SQL中的IF SQL%NOTFOUND THEN 这一行代码的意思是:如果最近的 SQL 语句没有找到任何匹配的记录,那么就执行后续的代码。通常,这个语句用于处理 SQL 查询可能找不到数据的情况。

执行结果:
在这里插入图片描述

五、小结
在GaussDB数据库中,游标主要用于执行复杂的查询语句、处理多行数据以及进行数据操作等场景。游标的使用可以提高程序的灵活性和可维护性,并且可以减少不必要的内存消耗。使用游标,开发人员可以灵活地控制查询结果集的遍历顺序和处理方式,以满足不同的业务需求。

——结束

​https://carrier.huawei.com/cn/products/it-new/cloud/dws

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/840897.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以学校数据模型为例,掌握在DAS下使用GaussDB

@目录题目具体操作一、表的创建二、表数据的插入三、数据查询 目的: 这里以学校数据库模型为例,介绍GaussDB数据库、表等常见操作,以及SQL语法使用的介绍。 题目 假设A市B学校为了加强对学校的管理,引入了华为GaussDB数据库。 在B学校里,主要涉及的对象有学生、教师、班级…

RGB565小工具

RGB565颜色显示和编码 使用PySide6, UI使用Qt designer生成。 在项目中驱动显示屏,使用的是RGB565的颜色格式。 有些在线的工具,可以进行RGB565颜色的选取和复制颜色值编码,但是不能实时查看字符和背景的颜色效果。 于是做了个小工具,可单独选择RGB三个颜色通道的值,指定字…

GaussDB SQL基础语法示例-常见的条件表达式

一、前言 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。 本系列将以《云数据库GaussDB—SQL参考》为主线进行介绍。 二、条件表达式的概念及GaussDB中的常见条件表达式 条件表达式是指在数据库中进行SQL语句查询时,…

GaussDB SQL基础语法示例-数组表达式

一、前言 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。 本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。 欢迎使用GaussDB数据库数组表达式。在本文中,我们将介绍GaussDB数据库中数组表达式的概…

周蕊、王聪的第三次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 以小组为单位,完成一个电梯演讲作业姓名-学号 周蕊-2022329301039、王聪2022329301036视频链接: http://xhslink.com/a/EbZ16dimtNp0 1.产品介绍 1.1. 产品简介实验室是高校开展教学科研和自主…

Vulnhub Hackademic:RTB1

0x01:端口扫描 主机发现 nmap -sn 192.168.231.0/24主机ip:192.168.231.136 全端口扫描 nmap -sT -sC -sV -O -p- 192.168.231.136 -oA /root/scan扫描到两个端口,22ssh端口关闭,80http端口开放,其中http跑的是apache服务器 UDP扫描 nmap -sU --min-rate 10000 -p- 192.16…

支持无限加载的js图片画廊插件

在线演示 下载natural-gallery-js是一款支持无限加载的js图片画廊插件。该js图片画廊支持图片的懒加载,可以对图片进行搜索,分类,还可以以轮播图的方式来展示和切换图片。使用方法 在页面中引入下面的CSS和js文件。<link rel="stylesheet" href="../dis…

[豪の学习笔记] 操作系统#001

操作系统的概念、功能、特征、发展和分类,终端和异常,系统调用,操作系统体系结构,操作系统引导,虚拟机1.1.1 - 操作系统的概念、功能 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用…

Vue Devtools的下载和安装

1.下载 下载地址:https://github.com/vuejs/vue-devtools/tree/v5.1.1 下载下来zip包。解压到指定文件夹 2.安装依赖 在这个目录,执行npm install命令进行依赖安装 4. 修改配置 打开解压目录vue-devtools-master下的shells/Chrome/manifest.json文件,将代码"persistent…

边缘计算与MEC浅谈

边缘计算是在靠近物或数据源头的网络边缘侧,通过融合网络、计算、存储、应用核心能力的分布式开放平台,就近提供边缘智能服务。简单点讲,边缘计算是将从终端采集到的数据,直接在靠近数据产生的本地设备或网络中进行分析,无需再将数据传输至云端数据处理中心。本文分享自天…

mybatis的拓展-----mybatis的内置参数和OGNL表达式的使用

mybatis的两个内置参数 1,_parameter 代表整个参数 单个参数,_parameter 就是这个参数多个参数 会被封装成一个map,_parameter就是代表这个map 例如接口中有一个方法 public List<Employee> getEmpsTestInnerParameter(Employee employee); _parameter就代表employee…

你的活动策划效率低?试试这个方法!

营销人的日常痛点:活动策划究竟有多难?任务繁杂,难以理清优先级一场成功的活动通常包含数十甚至上百个任务。活动前期要筹备物料、协调场地,中期要执行推广方案,后期还要跟进数据复盘。任务堆积如山,往往让人无从下手。协作难度大,信息容易丢失活动策划需要跨部门、跨团…