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

news2024/11/26 11:35:18

目录

一、前言

二、概述(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
DECLARE
   v_id  NUMBER(6);
   v_salary    NUMBER(8,2);
   CURSOR c1 IS SELECT id, salary FROM company2; 
BEGIN
   OPEN c1;
   LOOP
      FETCH c1 INTO v_id, v_salary;
      EXIT WHEN c1%NOTFOUND; 
      IF v_salary>=20000 THEN
         UPDATE 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 
    DECLARE
    v_name VARCHAR(10) := 'Allen';
    BEGIN
	   DELETE FROM company3 WHERE name = v_name;
       --根据游标状态做进一步处理
       IF SQL%NOTFOUND THEN
          INSERT 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.coloradmin.cn/o/1048229.html

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

相关文章

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的…

通讯网关软件015——利用CommGate X2MQTT实现MQTT访问Modbus RTU

本文介绍利用CommGate X2MQTT实现MQTT访问Modbus RTU。CommGate X2MQTT是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口,现在…

缓存雪崩、缓存击穿、缓存穿透

缓存雪崩 当缓存中大量的键值对同时过期或者Redis宕机了,大量的请求就会直接打到数据库,这种现象就是缓存雪崩 应对策略 有四种,分别是“均匀设置过期时间”、“互斥锁”、“双key策略”、“设置逻辑过期时间,异步更新缓存” …

WiFi产品认证通常需要准备哪些材料

我们做WiFi产品,都需要做一些认证。比方说FCC、CE、SRRC等认证。 认证需要准备很多材料。通常WiFi产品的认证需要准备的材料如下: 认证需要准备材料

解决使用flex布局引起的变形问题

只需在变形的样式中加以下代码,禁止拉伸就ok了 flex-shrink: 0;

【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 目录 背景说明 开始操作 at指令 背景说明 有时候普通用户需要使用sudo来执行一些操作,作为服务器管理员,需要盯着该用户使用完后再给他撤销sudo权限。当用户多起来的时候,这…

游戏设计模式专栏(一):工厂方法模式

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 在游戏开发中,代码的组织和结构对于项目的可…

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功(查看svn版本号) svnserve --version二、创建版本库 1、先建立目录,目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库,添加权限…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips:js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承(Parasitic Inheritance)是一种基于原型式的继承方式,它通过创建一个仅用于…

电气专业发展到头了?

今日话题 电气专业发展到头了? 电气绝对不是末路专业。但是有个前提,不要选错行业。大土木类的,不管是设计还是施工,都不要选择。 二、电网公司。电网是绕不开的话题,早些年电网待遇太好,搞得大家都理所…

最优化问题简介

最优化问题(也称优化问题)泛指定量决策问题,主要关心如何对有限 资源进行有效分配和控制,并达到某种意义上的最优.它通常需要对需求进 行定性和定量分析,建立恰当的数学模型来描述该问题,设计合…

SI3262:国产NFC+MCU+防水触摸按键三合一SoC芯片

目录 SI3262简介特点结构框图芯片特性 SI3262简介 Si3262是高度集成ACD低功耗MCUNFC15通道防水触摸按键的SoC芯片。 其MCU模块具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等丰富的…

WebGL雾化

目录 前言 如何实现雾化 线性雾化公式 雾化因子关系图 根据雾化因子计算片元颜色公式 示例程序(Fog.js) 代码详解​编辑 详解如何计算雾化因子(clamp()) 详解如何计算最终片元颜色(根据雾化因子计算片元颜色…

KongA 任意用户登录漏洞分析

KongA 简介 KongA 介绍 KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 https://github.com/pantsel/konga 。 KongA 概述 KongA 带来的一个最大的便利就是可以很好地通过UI观察到现在 Kong 的所有的配置,并且可以对于管理 Kong 节点 漏洞成因 未设置TOKEN_SECRE…

智能报修系统哪家好?有什么扫码一键报修的软件?

这是一套to b系统,专门为企事业单位提供日常的故障报修服务,单位员工遇到任何故障可扫码提交到平台上,再由平台根据技术维修员的擅长方向派单至技术维修员手中,全程可以跟踪报修的进度,每月可以导出维修记录&#xff0…

QT编译报错stdlib.h:No such file or directory

如图,需要将第19行,INCLUDEPATH /usr/include 注释掉 原因分析: 在Ubuntu的CSTDLIB中,使用的是#include_next下“stdlib.h” ,自行增加/usr/include 把include_next的顺序打乱,造成编译错误。但是在cento…

Qt 画自定义饼图统计的例子

先给出结果图,这个例子是将各种事件分类然后统计的其比例,然后画饼图显示出来 这个是我仿照官方给的例子,让后自己理解后,修改的,要生成饼图,需要QT的 charts 支持,安装QT 没有选择这个的&#…

RDMA Shared Receive Queue(四)

参考知乎文章《RDMA之Shared Receive Queue》:https://zhuanlan.zhihu.com/p/279904125 SRQ SRQ全称为Shared Receive Queue,即共享接受队列。在QP中,SQ用于下发SEND/WRITE/READ等操作,而RQ只用于下发RECV操作,对于本…

Bytebase x Hacktoberfest 2023 黑客啤酒节开源挑战邀请

🎃十月就要到了,年度开源庆典 Hacktoberfest 即将启动!今年,Bytebase 再次加入 Hacktoberfest,欢迎大家一起参加🍺 Hacktoberfest 是什么 Hacktoberfest Hacker 黑客 Oktoberfest 啤酒节,每…

远程访问:让您随时与电脑保持连接

远程访问可以带来什么? ​如今,我们的大部分工作都是在电脑的帮助下完成的。但是,我们并不总是坐在工作电脑前,随身携带电脑也很不方便,尤其是当工作设备是台式电脑而不是笔记本电脑时。那么,当我们不在…