学习目标
学习openGauss定义游标
为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系,游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。
准备工作
启动数据库
su - omm gsql -r
复制
课程作业
1. 创建游标,且使用select子句指定游标返回的行,分别使用FETCH抓取数据,MOVE重定位游标
首先创建一个数据表test1,并向其中插入一些数据:
create table test1(
id integer,
name character(10),
detail character(20)
);
insert into test1 values
(1,'aaa','reason 1'),
(2,'bbb','reason 2'),
(3,'ccc','reason 3'),
(4,'ddd','reason 4'),
(5,'eee','reason 5'),
(6,'fff','reason 6'),
(7,'ggg','reason 7');
复制
然后创建游标,并使用move移动游标,使用fetch抓取数据
start transaction;
cursor cursor1 for select * from test1 order by 1;
move forward 3 from cursor1;
fetch 4 from cursor1;
复制
可以看到,游标cursor1最初是在数据表开头位置,经过move操作后向后移动了三步,然后再通过fetch操作读取了游标当前所处位置的后四行数据
2. 在系统视图pg_cursors中查看游标
select * from pg_cursors;
复制
然后删除游标、结束事务
close cursor1;
end;
复制
3. 创建一个使用游标的存储过程
首先创建数据表company并插入数据
create table company(name varchar(100), loc varchar(100), no integer);
insert into company values ('macrosoft','usa',001);
insert into company values ('oracle','usa',002);
insert into company values ('backberry','canada',003);
复制
然后创建存储过程:
create or replace procedure test_cursor_1
as
company_name varchar(100);
company_loc varchar(100);
company_no integer;
cursor c1_all is --cursor without args
select name, loc, no from company order by 1, 2, 3;
begin
if not c1_all%isopen then
open c1_all;
end if;
loop
fetch c1_all into company_name, company_loc, company_no;
RAISE INFO 'company_name: %' ,company_name;
exit when c1_all%notfound;
end loop;
if c1_all%isopen then
close c1_all;
end if;
end;
/
复制
创建完成后调用过程查看结果:
call test_cursor_1();
drop procedure test_cursor_1;
复制
4. 清理数据
drop table test1;
drop table company;
复制
课程总结
Day17:学习了openGauss中的游标的相应操作,可以通过游标实现再指定数据上的移动操作。
Day17 打卡 get√
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
openGauss荣获中国软件行业协会多奖项,技术升级再创行业新高度
openGauss
471次阅读
2025-04-30 14:30:58
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
MogDB
303次阅读
2025-04-17 10:41:41
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
云和恩墨
198次阅读
2025-04-16 09:52:02
GitCode 成 openGauss 新归宿,国产开源数据库里程碑事件
严少安
157次阅读
2025-04-27 11:37:53
荣誉时刻!openGauss认证证书快递已发,快来看看谁榜上有名!
墨天轮小教习
150次阅读
2025-04-23 17:39:13
单个执行机并行执行MySQL到openGauss数据迁移子任务
Clipnosis
131次阅读
2025-04-30 16:39:58
openGauss6.0.0适配操作系统自带的软件,不依赖三方库
来杯拿铁
91次阅读
2025-04-18 10:49:53
opengauss使用gs_probackup进行增量备份恢复
进击的CJR
86次阅读
2025-04-09 16:11:58
Postgresql数据库单个Page最多存储多少行数据
maozicb
80次阅读
2025-04-23 16:02:19
openGauss新特性 | openGauss-DataVec向量数据库特性介绍
openGauss
53次阅读
2025-04-17 10:41:47