静态网站什么意思,世界500强企业排名2021,我的长沙app是哪里开发的,温州网站系统开发目录
一、前言
二、概述#xff08;GaussDB#xff09;
1、游标概述
2、游标的使用分类
三、GaussDB中的显式游标#xff08;示例#xff09;
1、显式游标的使用与操作步骤
2、显式游标示例
四、GaussDB中的隐式游标#xff08;示例#xff09;
1、隐式游标简介…目录
一、前言
二、概述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_salary20000 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.idt1.id ORDER BY ID ASC;
游标属性说明
%NOTFOUND是游标的属性之一用于控制程序流程或者了解程序的状态。此处的意思是当最近的DML数据操作语言操作如INSERTUPDATEDELETE等没有影响任何行时该属性为真。也就是说如果对表执行的操作没有找到任何匹配的行那么这个属性就会为真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数据库中游标主要用于执行复杂的查询语句、处理多行数据以及进行数据操作等场景。游标的使用可以提高程序的灵活性和可维护性并且可以减少不必要的内存消耗。使用游标开发人员可以灵活地控制查询结果集的遍历顺序和处理方式以满足不同的业务需求。 ——结束