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

目录

一、前言

二、概述(GaussDB)

1、游标概述

2、游标的使用分类

三、GaussDB中的显式游标(示例)

1、显式游标的使用与操作步骤

2、显式游标示例

四、GaussDB中的隐式游标(示例)

1、隐式游标简介

2、隐式游标示例

五、小结

一、前言

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

——结束

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

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

相关文章

MySQL基础进阶

文章目录 MySQL基础进阶 约束 \color{red}{约束} 约束约束的概念和分类约束的概念约束的分类 非空约束概念语法 唯一约束概念语法 主键约束概念语法 数据库设计 \color{red}{数据库设计} 数据库设计软件的研发步骤数据库设计概念数据库设计的步骤表关系一对一一对多&#xff08…

Pytest+Allure+Excel接口自动化测试框架实战

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。 Allure 是由 Java 语言开发的…

结构型设计模式——桥接模式

摘要 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 一、桥接模式的意图 将抽象与实现分离开来,使它们可以独立变化。 二、桥接模式的类图 Abstraction: 定义抽象类的接口Implementor: 定义实现类接口 …

MySQL 的 C 语言接口

1. mysql_init MYSQL *mysql_init(MYSQL *mysql); mysql_init函数的作用:创建一个 MYSQL 对象(该对象用于连接数据库)。 mysql_init函数的参数: ① mysql:MYSQL 结构体指针,一般设置为 NULL 。 mysql_init函…

嵌入式芯片-NE555

目录 1、比较器(运放) 2、相反门(非门) 3、或非门 4、双稳态触发器 5、NE555功能框图 1、比较器(运放) 2、相反门(非门) 3、或非门 4、双稳态触发器 5、NE555功能框图

俞敏洪:董宇辉在北京有房子了!

据媒体报道,9月26日,俞敏洪在直播中透露,董宇辉已经在北京拥有了自己的房子,并且强调这是大家共同努力的结果。 这一消息引起了广泛关注和热议。在此之前,董宇辉曾在公开场合表示,俞敏洪老师为了给他凑钱买…

数据库索引失效

索引失效是指数据库查询在执行过程中无法有效利用索引,导致查询性能下降或索引无法被使用的情况,以下是常见的导致索引失效的原因: 模糊查询以通配符开头,自己都不知道具体要查什么,怎么使用索引呢,所以会导…

输送机使用的常见误区

输送机也称流水线,是指在自动化生产过程中起到运输货物,联通各个生产设备的主要机械设备。但在使用的过程中,很多用户对于输送机的使用存在一定的误区,导致设备故障频出,下面就针对用户已在使用输送机过程中的常见误区…

Android Studio 创建项目不自动生成BuildConfig文件

今天在AS上新建项目发现找不到BuildConfig文件,怎么clear都不行。通过多方面查找发现原来gradle版本不同造成的,Gradle 8.0默认不生成 BuildConfig 文件。 如上图,8.0版本是没有source文件夹 上图是低于8.0版本有source文件夹 针对这个问题&…

基于若依框架进行二次开发优化指南

背景 若依(RuoYi)开源框架是一个功能强大的Java开发框架,专注于快速构建企业级后台管理系统。它提供了一套丰富的功能和模块,可以帮助开发人员快速搭建稳定、高效的管理系统。本篇博客将大家了解若依框架的基本概念和使用方法&am…

云原生Kubernetes:对外服务之 Ingress

目录 一、理论 1.Ingress 2.部署 nginx-ingress-controller(第一种方式) 3.部署 nginx-ingress-controller(第二种方式) 二、实验 1.部署 nginx-ingress-controller(第一种方式) 2.部署 nginx-ingress-controller(第二种方式) 三、问题 1.启动 nginx-ingress-controll…

Selenium Web自动化测试 —— 高级控件交互方法!

一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件(了解即可) https://www.selenium.dev/documentation/webdriver/actions_api 二、ActionChains解析 实例…

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录 一、环境准备二、基础软件三、扩展:usb拓展插件 一、环境准备 1、下载VMware虚拟机的壳子,安装并注册软件(可以百度注册码),最新版本:v17 2、下MacOS系统iOS镜像文件,用于vmware虚拟机安装,当前镜…

油猴(篡改猴)学习记录

第一个Hello World 注意点:默认只匹配了http网站,如果需要https网站,需要自己添加match https://*/*代码如下 这样子访问任意网站就可以输出Hello World // UserScript // name 第一个脚本 // namespace http://tampermonkey.net/ // version 0.1 // descri…

ElasticSearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,…

钢轨长度及允许偏差

声明 本文是学习GB-T 2585-2021 铁路用热轧钢轨. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铁路用钢轨的订货内容、分类、尺寸、外形、质量及允许偏差、技术要求、试验方法、检 验规则、标志及质量证明书。 本标准适用于3…

MySQL ——多表连接查询

一、(左、右和全)连接概念 内连接: 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分,两张表是平等的。 关键字:inner join on 语句&#xf…

css实现Chrome标签栏

如图这是一个特殊的带有圆角的导航栏&#xff0c;实现这种效果并不难 这是我实现的效果&#xff1a; 淡一点的就是鼠标悬停的样式 以下是代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结…

使用 PyTorch 的计算机视觉简介 (3/6)

一、说明 在本单元中&#xff0c;我们将了解卷积神经网络&#xff08;CNN&#xff09;&#xff0c;它是专门为计算机视觉设计的。 卷积层允许我们从图像中提取某些图像模式&#xff0c;以便最终分类器基于这些特征。 二、卷积神经网络 计算机视觉不同于通用分类&#xff0c;因…