学习目标
学习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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




