暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第17天|游标

原创 2021-12-17
818

Day17 openGauss中定义游标

学习目标

学习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');
复制

1.1.PNG

然后创建游标,并使用move移动游标,使用fetch抓取数据

start transaction; cursor cursor1 for select * from test1 order by 1; move forward 3 from cursor1; fetch 4 from cursor1;
复制

1.2.PNG
可以看到,游标cursor1最初是在数据表开头位置,经过move操作后向后移动了三步,然后再通过fetch操作读取了游标当前所处位置的后四行数据

2. 在系统视图pg_cursors中查看游标

select * from pg_cursors;
复制

2.1.PNG

然后删除游标、结束事务

close cursor1; end;
复制

2.2.PNG

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;
复制

3.PNG

4. 清理数据

drop table test1; drop table company;
复制

4.PNG

课程总结

Day17:学习了openGauss中的游标的相应操作,可以通过游标实现再指定数据上的移动操作。
Day17 打卡 get√

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论