openGauss学习笔记-38 openGauss 高级数据管理-游标
文章目录
- openGauss学习笔记-38 openGauss 高级数据管理-游标
- 38.1 语法格式
- 38.2 参数说明
- 38.3 示例
openGauss学习笔记-38 openGauss 高级数据管理-游标
为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。
38.1 语法格式
-
定义游标
CURSOR cursor_name[ BINARY ] [ NO SCROLL ] [ { WITH | WITHOUT } HOLD ]FOR query ;
-
通过已经创建的游标检索数据
FETCH [ direction { FROM | IN } ] cursor_name;
其中direction子句为可选参数。
NEXT| PRIOR| FIRST| LAST| ABSOLUTE count| RELATIVE count| count| ALL| FORWARD| FORWARD count| FORWARD ALL| BACKWARD| BACKWARD count| BACKWARD ALL
-
在不检索数据的情况下重新定位一个游标
MOVE的作用类似于FETCH命令,但只是重定位游标而不返回行。
MOVE [ direction [ FROM | IN ] ] cursor_name;
其中direction子句为可选参数。
NEXT| PRIOR| FIRST| LAST| ABSOLUTE count| RELATIVE count| count| ALL| FORWARD| FORWARD count| FORWARD ALL| BACKWARD| BACKWARD count| BACKWARD ALL
-
关闭游标,释放和一个游标关联的所有资源
CLOSE { cursor_name | ALL } ;
38.2 参数说明
-
cursor_name
将要创建、关闭的游标名。
-
BINARY
指明游标以二进制而不是文本格式返回数据。
-
NO SCROLL
声明游标检索数据行的方式。
- NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。
- 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。
-
WITH HOLD | WITHOUT HOLD
声明当创建游标的事务结束后,游标是否能继续使用。
- WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。
- WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。
- 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。
- 跨节点事务不支持WITH HOLD(例如在多DBnode部署openGauss中所创建的含有DDL的事务属于跨节点事务)。
-
query
使用SELECT或VALUES子句指定游标返回的行。
取值范围:SELECT或VALUES子句。
-
direction_clause
定义抓取数据的方向。
取值范围:
-
NEXT(缺省值)
从当前关联位置开始,抓取下一行。
-
PRIOR
从当前关联位置开始,抓取上一行。
-
FIRST
抓取查询的第一行(和ABSOLUTE 1相同)。
-
LAST
抓取查询的最后一行(和ABSOLUTE -1相同)。
-
ABSOLUTE count
抓取查询中第count行。
ABSOLUTE抓取不会比用相对位移移动到需要的数据行更快,因为下层的实现必须遍历所有中间的行。
count取值范围:有符号的整数
- count为正数,就从查询结果的第一行开始,抓取第count行。
- count为负数,就从查询结果末尾抓取第abs(count)行。
- count为0时,定位在第一行之前。
-
RELATIVE count
从当前关联位置开始,抓取随后或前面的第count行。
取值范围:有符号的整数
- count为正数就抓取当前关联位置之后的第count行。
- count为负数就抓取当前关联位置之前的第abs(count)行。
- 如果当前行没有数据的话,RELATIVE 0返回空。
-
count
抓取随后的count行(和FORWARD count一样)。
-
ALL
从当前关联位置开始,抓取所有剩余的行(和FORWARD ALL一样)。
-
FORWARD
抓取下一行(和NEXT一样)。
-
FORWARD count
从当前关联位置开始,抓取随后或前面的count行。
-
FORWARD ALL
从当前关联位置开始,抓取所有剩余行。
-
BACKWARD
从当前关联位置开始,抓取前面一行(和PRIOR一样) 。
-
BACKWARD count
从当前关联位置开始,抓取前面的count行(向后扫描)。
取值范围:有符号的整数
- count为正数就抓取当前关联位置之前的count行。
- count为负数就抓取当前关联位置之后的abs(count)行。
- 如果有数据的话,BACKWARD 0重新抓取当前行。
-
BACKWARD ALL
从当前关联位置开始,抓取所有前面的行(向后扫描) 。
-
-
{ FROM | IN } cursor_name
使用关键字FROM或IN指定游标名称。
取值范围:已创建的游标的名称。
-
ALL
关闭所有已打开的游标。
38.3 示例
假设存在表customer_t1 ,数据内容如下:
openGauss=# SELECT * FROM customer_t1;c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------3769 | | Grace | |3769 | hello | | |6885 | maps | Joes | | 22004321 | tpcds | Lily | | 30009527 | world | James | | 5000
(5 rows)
-
用一个游标读取一个表。
--开始一个事务。 openGauss=# START TRANSACTION; START TRANSACTION--建立一个名为cursor1的游标。 openGauss=# CURSOR cursor1 FOR SELECT * FROM customer_t1; DECLARE CURSOR--抓取前3行到游标cursor1里。 openGauss=# FETCH FORWARD 3 FROM cursor1;c_customer_sk | c_customer_id | c_first_name | c_last_name | amount ---------------+---------------+--------------+-------------+--------3769 | | Grace | |3769 | hello | | |6885 | maps | Joes | | 2200 (3 rows)--关闭游标并提交事务。 openGauss=# CLOSE cursor1; CLOSE CURSOR--结束一个事务。 openGauss=# END; COMMIT
-
用一个游标读取VALUES子句中的内容。
--开始一个事务。 openGauss=# START TRANSACTION; START TRANSACTION--建立一个名为cursor2的游标。 openGauss=# CURSOR cursor2 FOR VALUES(1,2),(0,3) ORDER BY 1; DECLARE CURSOR--抓取前2行到游标cursor2里。 openGauss=# FETCH FORWARD 2 FROM cursor2;column1 | column2 ---------+---------0 | 31 | 2 (2 rows)--关闭游标并提交事务。 openGauss=# CLOSE cursor2; CLOSE CURSOR--结束一个事务。 openGauss=# END; COMMIT
-
WITH HOLD游标的使用。
--开启事务。 openGauss=# START TRANSACTION;--创建一个with hold游标。 openGauss=# DECLARE cursor1 CURSOR WITH HOLD FOR SELECT * FROM customer_t1;--抓取头2行到游标cursor1里。 openGauss=# FETCH FORWARD 2 FROM cursor1;c_customer_sk | c_customer_id | c_first_name | c_last_name | amount ---------------+---------------+--------------+-------------+--------3769 | | Grace | |3769 | hello | | | (2 rows)--结束事务。 openGauss=# END; COMMIT--抓取下一行到游标cursor1里。 openGauss=# FETCH FORWARD 1 FROM cursor1;c_customer_sk | c_customer_id | c_first_name | c_last_name | amount ---------------+---------------+--------------+-------------+--------6885 | maps | Joes | | 2200 (1 row)--关闭游标。 openGauss=# CLOSE cursor1; CLOSE CURSOR
-
MOVE语句的使用。
--开始一个事务。 openGauss=# START TRANSACTION; START TRANSACTION--定义一个名为cursor1的游标。 openGauss=# CURSOR cursor1 FOR SELECT * FROM customer_t1; DECLARE CURSOR--忽略游标cursor1的前3行。 openGauss=# MOVE FORWARD 1 FROM cursor1; MOVE 1--抓取游标cursor1的前2行。 openGauss=# FETCH 2 FROM cursor1;c_customer_sk | c_customer_id | c_first_name | c_last_name | amount ---------------+---------------+--------------+-------------+--------3769 | hello | | |6885 | maps | Joes | | 2200 (2 rows)--关闭游标。 openGauss=# CLOSE cursor1; CLOSE CURSOR--结束一个事务。 openGauss=# END; COMMIT
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
相关文章:

openGauss学习笔记-38 openGauss 高级数据管理-游标
文章目录 openGauss学习笔记-38 openGauss 高级数据管理-游标38.1 语法格式38.2 参数说明38.3 示例 openGauss学习笔记-38 openGauss 高级数据管理-游标 为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游…...

Blazor简单教程(1.1):Razor基础语法
文章目录 前言基本文件配置引入Layout组件 语法介绍pagecodeRazor 语法[ 显式表达和隐式表达](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 绑定简单绑定双向绑定带参数的函数绑定 依赖注入 前言 Blazor…...

Leetcode-每日一题【剑指 Offer 25. 合并两个排序的链表】
题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 限制: 0 < 链表长度 < 1000 解题思路 1…...
前端盒子模型
day05-盒子模型 目标:掌握盒子模型组成部分,使用盒子模型布局网页区域 01-选择器 结构伪类选择器 基本使用 作用:根据元素的结构关系查找元素。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNhfXFEc-169194…...

【ARM Cache 系列文章 9 -- ARM big.LITTLE技术】
文章目录 big.LITTLE 技术背景big.LITTLE 技术详解big.LITTLE 硬件要求 big.LITTLE 软件模型CPU MigrationGlobal Task SchedulingGlobal Task Scheduling比CPU Migration的优势 转自:https://zhuanlan.zhihu.com/p/630981648 如有侵权,请联系删除 big.L…...

【BASH】回顾与知识点梳理(十四)
【BASH】回顾与知识点梳理 十四 十四. 文件与目录的默认权限与隐藏权限14.1 文件预设权限:umaskumask 的利用与重要性:专题制作 14.2 文件隐藏属性chattr (配置文件案隐藏属性)lsattr (显示文件隐藏属性) 14.3 文件特殊权限: SUID, SGID, SBI…...

乡村振兴指数与其30余个原始变量数据(2000-2022年)
乡村振兴是当下经济学研究的热点之一,对乡村振兴进行测度,是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据,供大家使用。 数据来源&…...
深入理解MySQL表的操作和管理
MySQL是一种广泛使用的关系型数据库管理系统,用于存储和管理大量结构化数据。在MySQL中,表是数据的基本组织单位,对表的操作和管理能力对于数据库的性能和数据完整性至关重要。本文将深入讨论MySQL表的操作和管理,包括创建表、修改…...

MATLAB图论合集(一)基本操作基础
本帖总结一些经典的图论问题,通过MATLAB如何计算答案。近期在复习考研,以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈,不过在实际应用中解决问题还是很不错的,比C易上手得多~ 图论中的图(Graph…...

Redis布隆过滤器的原理和应用场景,解决缓存穿透
目录 一、redis 二、布隆过滤器 三、缓存穿透问题 四、布隆过滤器解决缓存穿透 一、redis Redis(Remote Dictionary Server)是一种开源的内存数据存储系统,也是一个使用键值对(Key-Value)方式的高性能数据库。Red…...
数据结构中的英文缩写和易忘的专有名词
树与二叉树 满二叉树:每层的节点数都是该层能取到的最大值完全二叉树:在满二叉树的基础上,去掉最下层右面的一些连续叶子节点所形成的二叉树AVL:平衡二叉树。树中任意节点的左子树和右子树高度之差的绝对值不超过1的二叉排序树称…...

Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息
Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息 目录 Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、关键代码 一、简单介绍 Unity中的一些知…...

MODBUS TCP转CCLINK IE协议网关cclink通讯异常的处理方法
你是否曾经遇到过需要将不同的设备连接到一个统一的网络中?或者你是否曾经遇到过设备之间的通讯协议不兼容的问题?捷米的JM-CCLKIE-TCP通讯网关就是为解决这些问题而设计的。 JM-CCLKIE-TCP通讯网关是一款自主研发的CCLINK IE FIELD BASIC从站功能的通讯…...

linux中的ifconfig和ip addr
在linux操作系统中ifconfig和ip addr都是显示网卡配置信息的命令,好多人有疑惑它们有什么区别呢 区别1:对于linux发行的版本不一样 ip addr是对新发行版本的linux使用会比较多;而ifconfig是老版本遇到使用的会比较多。 区别2:显…...

图像多目标跟踪
目标跟踪(Object Tracking)是自动驾驶中常见的任务,根据跟踪目标数量的不同,目标跟踪可分为: 单目标跟踪(Single Object Tracking,SOT)多目标跟踪(Multi-Objects Tracki…...

42 | 航空公司客户价值分析
民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司、民营航空公司,甚至国外航空巨头。航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价格、服务间的竞争逐渐转向对客户的竞争。 目前航空公司已积累了大量的会员档案信息和其乘坐航班…...

第三章 图论 No.11二分图,匈牙利算法与点覆盖
文章目录 二分染色:257. 关押罪犯增广路径372. 棋盘覆盖 最小点覆盖376. 机器任务 最大独立集378. 骑士放置 最小路径点覆盖 二分染色:257. 关押罪犯 257. 关押罪犯 - AcWing题库 最大最小问题,一眼二分 答案的范围在 [ 1 , 1 e 9 ] [1, 1…...

Die2Die(D2D)和chip2chip(C2C)之间的高速互联接口
随着chiplet的兴起,Die2Die的高速互联越来越重要,相比于传统的C2C(chip2chip)的互联,D2D的片间距离很近(10mm量级),且这些小的chip(裸片)最终形成一个封装【多芯片模块(MCM)】。所以D2D的互联信道短&#x…...
JAVA设计模式汇总
文章目录 一、设计模式分为三大类二、设计模式的六大原则三、汇总 一、设计模式分为三大类 创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式…...
【实战讲解】数据血缘落地实施
在复杂的社会分工协作体系中,我们需要明确个人定位,才能更好的发挥价值,数据也是一样,于是,数据血缘应运而生。 今天这篇文章会全方位的讲解数据血缘,并且给出具体的落地实施方案。 一、数据血缘是什么…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...