应无所住,而生其心
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

Oracle使用游标

6341人阅读 2018/12/29 10:36 总访问:4712822 评论:0 收藏:0 手机
分类: Oracle

其实游标就是把查询的结果放入游标中,然后在去游标里边读取。相当于使用游标做了一个中转,而游标是可以作为参数进行传递的,所以游标可以在存储过程中起来数据集的桥梁作用


游标介绍

1、游标是在内存中开辟的一块区域。

2、游标通过select语句确定从数据库中读取数据的记录集。

3、通过打开(Open)语句把确定的记录集读入到游标开辟的内存区。

4、游标又充当指针的作用。通过执行fetch语句向下移动指针,同时把指针所指的行数据赋给指定的变量中。

5、通过close语句关闭数据库,并释放游标所占的内存区。


使用游标的一般步骤

1、定义一个游标,也就是申明一块内容地址

     注意游标只能使用is,不能使用as

2、给游标关联一个sql语句

3、使用open打开游标,就会执行sql语句,把集合放入内存

4、循环使用fecth去读取游标的内容放入变量中

5、关闭游标,释放内存资源


使用游标查询emp表中的ename与sal字段

declare cursor cursor_emp --1:定义游标
is 
   select ename,sal from scott.emp where deptno = 20;--2:给游标关联一个sql语句
   v_ename scott.emp.ename%type; --定义一个和emp表中ename字段一样的遍历
   v_sal  scott.emp.sal%type;  --定义一个和emp表中sal字段一样的遍历

begin
   open cursor_emp; --3:打开游标
   loop
       fetch cursor_emp into v_ename,v_sal;--4:使用fecth去读取游标的内容放入变量中
       exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
       dbms_output.put_line(v_ename||':'||v_sal);
   end loop;
   close cursor_emp;--5、关闭游标,释放内存资源
end;

结果如下:



使用游标查询emp表中所有的字段

其实就是直接查询所有字段

然后使用scott.emp%rowtype;取一个整行的数据类型就行了

declare cursor cursor_emp --1:定义游标
is 
   select * from scott.emp where deptno = 20;--2:给游标关联一个sql语句
   v_row scott.emp%rowtype; --定义一个和emp表中行一样的数据类型

begin
   open cursor_emp; --3:打开游标
   loop
       fetch cursor_emp into v_row;--4:使用fecth去读取游标的内容放入变量中
       exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
       dbms_output.put_line(v_row.ename||':'||v_row.sal||':'||v_row.job);
   end loop;
   close cursor_emp;--5、关闭游标,释放内存资源
end;

结果如下:


游标使用参数

declare cursor cursor_emp(p_deptno number) --1:定义游标
is 
   select * from scott.emp where deptno = p_deptno;--2:给游标关联一个sql语句
   v_row scott.emp%rowtype; --定义一个和emp表中行一样的数据类型

begin
   open cursor_emp(20); --3:打开游标,传递参数
   loop
       fetch cursor_emp into v_row;--4:使用fecth去读取游标的内容放入变量中
       exit when cursor_emp%notfound; --退出条件:当游标读取完内容时退出
       dbms_output.put_line(v_row.ename||':'||v_row.sal||':'||v_row.job);
   end loop;
   close cursor_emp;--5、关闭游标,释放内存资源
end;


使用游标更新和删除数据

非常忙空了在写┭┮﹏┭┮


游标配合存储过程使用

超级忙空了在写┭┮﹏┭┮



欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价