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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 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的游标功能,感谢您的阅读。

相关文章
|
开发工具
在 uniapp 上使用 mPaaS 的全屏扫码功能
在 uniapp 上使用 mPaaS 的全屏扫码功能
1145 1
|
SQL 存储 大数据
大数据Hive DDL其他语法
大数据Hive DDL其他语法
384 1
|
11月前
|
定位技术
鸿蒙5开发宝藏案例分享---折叠屏悬停态开发实践
本文详解鸿蒙折叠屏悬停态开发技巧,分享官方隐藏宝藏资源。通过FolderStack、FoldSplitContainer和自定义方案三种方式,手把手教你实现视频播放、游戏双屏操作及特殊角度拍摄等场景。附避坑指南与选择建议,助你高效开发!
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
11月前
|
IDE JavaScript 开发工具
如何在通义灵码里使用 MCP 能力
通义灵码支持MCP工具使用,通过模型自主规划实现工具调用,深度集成魔搭MCP广场,涵盖2400+热门服务。提供STDIO和SSE两种通信模式,适用于不同场景需求。用户可通过智能体模式调用MCP工具,完成如网页内容抓取、天气查询等任务。文档详细介绍了服务配置、使用流程及常见问题解决方法,助力开发者高效拓展AI编码能力。
1477 44
|
10月前
|
Java API 数据安全/隐私保护
访问修饰符 public private protected 及默认情况的区别解析
在Java编程中,访问修饰符(`public`、`private`、`protected`和默认)用于控制类、方法、字段及构造函数的访问范围。`public`允许所有类访问;`private`仅限类内部访问;`protected`允许同一包内或子类访问;默认(无修饰符)仅限同一包内访问。通过合理使用这些修饰符,可实现数据封装、提高安全性和代码可维护性。了解它们的区别与应用场景,是掌握Java面向对象编程的关键。
1845 6
|
数据库连接 Linux 数据库
GBase 8s数据库连接 – Python
GBase 8s数据库连接 – Python
|
存储 缓存 资源调度
研究一下「pnpm」这个神奇的包管理工具
研究一下「pnpm」这个神奇的包管理工具
1115 0
|
监控 NoSQL Java
在Spring Boot中集成Redisson实现延迟队列
在Spring Boot中集成Redisson实现延迟队列
1115 6
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
1676 3