南大通用GBase 8s 静态游标介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: GBase 8s 数据 兼容Oracle的PL/SQL编程语言,支持多种数据类型、变量声明及控制结构。本文重点介绍静态游标的使用方法,包括隐式和显式游标。隐式游标自动管理,适用于DML操作;显式游标需手动定义与管理,提供更灵活的数据处理方式。通过合理运用游标,可提高数据库操作效率和代码可维护性。

GBase 8s兼容O的PL/SQL编程语言,包括PL/SOL支持的数据类型,变量声明、赋值语法,顺序、选择、循环分支语法,集合、记录对象的使用,静态SQL、动态SQL语法以及错误处理等。本文主要介绍在数据库编程中,静态游标的使用方法。GBase 8s数据库提供了两种类型的静态游标:隐式游标和显式游标。本文将详细介绍GBase 8s中的静态游标,包括它们的使用场景、特点以及如何有效利用它们来提高数据库操作的效率。

静态游标是只读游标,它总是按照打开游标时的原样显示结果集,在编译时就能确定静态游标使用的查询。

隐式游标:
隐式游标无需用户进行定义,每当用户在兼容O模式 的 PL/SQL 程序中执行一个 DML 语句(INSERT、UPDATE、DELETE)或者 SELECT...INTO 语句时,会自动声明一个隐式游标并管理这个游标。

1、隐式游标的特点:
隐式游标是由PL/SQL 来管理的, 即不需要声明游标语句, 也不需要OPEN,FETCH,CLOSE 操作;
隐式游标中必须要有select cur_name into [ 变量名或其他数据类型]. 此句完成OPEN,FETCH,CLOSE 操作;
隐式游标只能返回一行记录, 如果无符合条件的记录将会出现NO_DATA_FOUND 异常. 如果出现多条记录将出现TOO_MANY_ROWS 异常;
隐式游标只能用SQL% 判断其游标属性;
对于任何位置使用SQL%ISOPEN 结果都是FALSE, 隐式游标由PL/SQL 管理;
对于在隐式游标位置前使用SQL%FOUND 或SQL%NOTFOUND, SQL%ROWCOUNT 结果值是NULL( 不确定值)。
2、隐式游标支持的属性:
SQL%ISOPEN

(1)含义:游标是否打开;

(2)始终返回false,因为隐式游标在关联语句执行完后永远是关闭的。

SQL%FOUND

(1)含义:是否有行受影响;

(2)返回NULL:没有select或dml运行;

(3)返回TRUE:有返回,影响一行或多行;

(4)返回FALSE:其它情况。

SQL%NOTFOUND

(1)含义:是否没有受影响的行;

(2)返回NULL:没有select或dml运行;

(3)返回TRUE:其它情况;

(4)返回FALSE:有返回,影响一行或多行。

SQL%ROWCOUNT

(1)含义:返回被影响的行数;

(2)返回NULL:没有select或dml运行;

(3)返回其它值:影响的行数。

显示游标
1、显示游标的特点:
(1)显式游标由用户构造和管理;

(2)必须声明显示游标,并给他命名和关联一个查询语句;

(3)显示游标不支持赋值,不能在表达式中使用,不能作为子程序的参数或宿主变量使用;

(4)如不得不使用,则选择使用游标变量来实现。

2、使用显示游标的步骤:
(1)定义游标:声明游标及其关联的查询语句;

(2)打开游标:执行游标关联的语句,将查询结果装入游标工作区,将游标定位到结果集的第一行之前;

(3)拨动游标:根据应用需要将游标位置移动到结果集的合适位置;

(4)关闭游标:游标使用完后应关闭,以释放其占有的资源。

3、游标的使用:
游标声明和定义

DECLARE
--声明c1
CURSOR c1 RETURN departments%ROWTYPE;
--声明并定义c2
CURSOR c2 IS SELECT employee_id, job_id, salary FROM employees WHERE salary > 2000;
--定义c1
CURSOR c1 RETURN departments%ROWTYPE IS SELECT FROM departments WHERE department_id = 110;
--声明c3
CURSOR c3;
--定义c3
CURSOR c3 IS SELECT
FROM locations WHERE country_id = 'JP';
BEGIN
NULL;
END;
/
into到普通变量

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');
declare
v1 int;
v2 varchar(10);
cursor c1 is select id, name from t;
begin
open c1;
loop
fetch c1 into v1,v2;
exit when c1%notfound;
dbms_output.put_line('id = '||v1);
dbms_output.put_line('name = '||v2);
end loop;

close c1;
end;
/
into到record类型变量

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');
declare
v t%rowtype;
cursor c1 is select id, name from t;
begin
open c1;
loop
fetch c1 into v;
exit when c1%notfound;
dbms_output.put_line('id = '||v.id);
dbms_output.put_line('name = '||v.name);
end loop;

close c1;
end;
/
带参数的游标(调用前open)

--创建表
create table t(id int,name varchar(10));
insert into t values(1,'jack');
insert into t values(2,'jerry');

declare
cursor c (c_id int) is select name from t where id = c_id;
--定义存储过程
procedure p1 is
p_name varchar(10);
begin
loop
fetch c into p_name;
exit when c%notfound;
dbms_output.put_line('result is: '||p_name);
end loop;
end;

begin
open c(2); --打开游标
p1; --调用存储过程
close c; --关闭游标
end;
/
通过本文的详细介绍,您了解GBase 8s中的静态游标及其应用。合理使用游标不仅可以提高数据库查询的效率,还可以使代码更加清晰和易于维护。希望本文能帮助您更好地利用GBase 8s的游标功能,感谢您的阅读。

相关文章
|
8月前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL隐式游标:数据的“自动导游”与“轻松之旅”
【4月更文挑战第19天】Oracle PL/SQL中的隐式游标是自动管理的数据导航工具,简化编程工作,尤其适用于简单查询和DML操作。它自动处理数据访问,提供高效、简洁的代码,但不适用于复杂场景。显式游标在需要精细控制时更有优势。了解并适时使用隐式游标,能提升数据处理效率,让开发更加轻松。
|
2月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
2月前
|
SQL 存储 Oracle
南大通用GBase 8s数据库游标变量解析:提升数据库操作效率
南大通用GBase 8s 数据库游标变量解析:提升数据库操作效率
|
2月前
|
SQL 测试技术 数据库
|
2月前
|
SQL 安全 数据库
南大通用GBase 8s 查看用户权限查询指南
本文详细介绍了南大通用GBase 8s数据库中用户权限的查看与管理方法,涵盖数据库级别和表级别权限的定义、查看及赋权操作,以及相关系统表的使用,旨在帮助数据库管理员有效维护数据访问安全。
|
2月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
数据挖掘 BI 定位技术
南大通用GBase 8s 高级分组查询 —— GROUP BY ROLLUP介绍
本文详细介绍了GBase 8s数据库中GROUP BY ROLLUP的高级分组查询功能,涵盖基本概念、语法结构、应用示例及使用场景。ROLLUP支持多维度数据汇总,适用于销售分析、财务报表和用户统计等领域,提升数据汇总的灵活性与便捷性。
|
2月前
|
存储 Java 数据库连接
南大通用GBase 8s大对象类型clob和text的比较说明
本文探讨了GBase数据库中用于存储大对象数据的字段类型,包括TEXT、CLOB、BYTE和BLOB,分析了它们的特点、适用场景及在实际应用中的最佳实践。重点介绍了不同数据大小对应的字段类型选择,以及在数据库工具和程序中操作这些类型的方法,强调了合理选择字段类型对提升数据库性能的重要性。
|
2月前
|
SQL Oracle 关系型数据库
南大通用GBase 8s 数据库封锁与并发事务调度介绍
南大通用GBase 8s 数据库封锁与并发事务调度介绍
|
2月前
|
存储 缓存 网络安全
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤