当前位置: 首页 > news >正文

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. 合并两个排序的链表】

题目 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 解题思路 1…...

前端盒子模型

day05-盒子模型 目标&#xff1a;掌握盒子模型组成部分&#xff0c;使用盒子模型布局网页区域 01-选择器 结构伪类选择器 基本使用 作用&#xff1a;根据元素的结构关系查找元素。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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的优势 转自&#xff1a;https://zhuanlan.zhihu.com/p/630981648 如有侵权&#xff0c;请联系删除 big.L…...

【BASH】回顾与知识点梳理(十四)

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

乡村振兴指数与其30余个原始变量数据(2000-2022年)

乡村振兴是当下经济学研究的热点之一&#xff0c;对乡村振兴进行测度&#xff0c;是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据&#xff0c;供大家使用。 数据来源&…...

深入理解MySQL表的操作和管理

MySQL是一种广泛使用的关系型数据库管理系统&#xff0c;用于存储和管理大量结构化数据。在MySQL中&#xff0c;表是数据的基本组织单位&#xff0c;对表的操作和管理能力对于数据库的性能和数据完整性至关重要。本文将深入讨论MySQL表的操作和管理&#xff0c;包括创建表、修改…...

MATLAB图论合集(一)基本操作基础

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

Redis布隆过滤器的原理和应用场景,解决缓存穿透

目录 一、redis 二、布隆过滤器 三、缓存穿透问题 四、布隆过滤器解决缓存穿透 一、redis Redis&#xff08;Remote Dictionary Server&#xff09;是一种开源的内存数据存储系统&#xff0c;也是一个使用键值对&#xff08;Key-Value&#xff09;方式的高性能数据库。Red…...

数据结构中的英文缩写和易忘的专有名词

树与二叉树 满二叉树&#xff1a;每层的节点数都是该层能取到的最大值完全二叉树&#xff1a;在满二叉树的基础上&#xff0c;去掉最下层右面的一些连续叶子节点所形成的二叉树AVL&#xff1a;平衡二叉树。树中任意节点的左子树和右子树高度之差的绝对值不超过1的二叉排序树称…...

Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息

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

MODBUS TCP转CCLINK IE协议网关cclink通讯异常的处理方法

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

linux中的ifconfig和ip addr

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

图像多目标跟踪

目标跟踪&#xff08;Object Tracking&#xff09;是自动驾驶中常见的任务&#xff0c;根据跟踪目标数量的不同&#xff0c;目标跟踪可分为&#xff1a; 单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;多目标跟踪&#xff08;Multi-Objects Tracki…...

42 | 航空公司客户价值分析

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

第三章 图论 No.11二分图,匈牙利算法与点覆盖

文章目录 二分染色&#xff1a;257. 关押罪犯增广路径372. 棋盘覆盖 最小点覆盖376. 机器任务 最大独立集378. 骑士放置 最小路径点覆盖 二分染色&#xff1a;257. 关押罪犯 257. 关押罪犯 - AcWing题库 最大最小问题&#xff0c;一眼二分 答案的范围在 [ 1 , 1 e 9 ] [1, 1…...

Die2Die(D2D)和chip2chip(C2C)之间的高速互联接口

随着chiplet的兴起&#xff0c;Die2Die的高速互联越来越重要&#xff0c;相比于传统的C2C(chip2chip)的互联&#xff0c;D2D的片间距离很近(10mm量级)&#xff0c;且这些小的chip(裸片)最终形成一个封装【多芯片模块&#xff08;MCM&#xff09;】。所以D2D的互联信道短&#x…...

JAVA设计模式汇总

文章目录 一、设计模式分为三大类二、设计模式的六大原则三、汇总 一、设计模式分为三大类 创建型模式共五种&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式共七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式…...

【实战讲解】数据血缘落地实施

‍在复杂的社会分工协作体系中&#xff0c;我们需要明确个人定位&#xff0c;才能更好的发挥价值&#xff0c;数据也是一样&#xff0c;于是&#xff0c;数据血缘应运而生。 今天这篇文章会全方位的讲解数据血缘&#xff0c;并且给出具体的落地实施方案。 一、数据血缘是什么…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...