oracle能否避免使用游标,Oracle之游标使用以及优缺点

本文介绍了数据库游标的定义、作用及使用方法,并通过两个具体的Oracle SQL示例解释了如何使用带参数和不带参数的显式游标。同时,讨论了游标的优缺点,尤其是在大数据量场景下的适用性和局限性。

游标(cursor)能够根据查询条件从数据表中提取一组记录,将其作为一个临时表置于数据缓冲区中,利用指针逐行对记录数据进行操作。

举例带参数的显示游标:

如下是查询Oracle Scott下的emp表中empno为7788的姓名和工资。

declare

cursor cur_emp(p_empno number) is

select e.ename, e.sal from scott.emp e where emp.empno = p_empno; --声明游标

v_empno emp.empno%type := 7788;

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

open cur_emp(v_empno); --打开游标

--循环取出

loop --loop循环

fetch cur_emp

into v_ename, v_sal; --提取记录

exit when cur_emp%notfound;--退出循环

dbms_output.put_line(v_ename || '的工资是' || v_sal);

end loop;

close cur_emp; --关闭游标

end;

举例不带参数的显示游标:

如下是查询Oracle Scott下的emp表中empno为7788的姓名和工资。

declare

cursor cur_emp is

select e.ename, e.sal from scott.emp e where e.empno=7788 ; --声明游标

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

open cur_emp; --打开游标

--循环取出

loop

fetch cur_emp

into v_ename, v_sal; --提取记录

exit when cur_emp%notfound;

dbms_output.put_line(v_ename || '的工资是' || v_sal);

end loop;

close cur_emp; --关闭游标

end;

以上输出结果相同,如下:

53c465db3c698fa4bfa69a1897426b89.png

数据库游标的作用及优缺点

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。

概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。

游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。

大部分程序数据设计语言都能使用游标来检索SQL数据库中的数据,在程序中嵌入游标和在程序中嵌入SQL语句相同

因为我们做的数据量大,而且系统上跑的不只我们一个业务。所以,我们都要求尽量避免使用游标,游标使用时会对行加锁,可能会影响其他业务的正常进行。而且,数据量大时其效率也较低效。另外,内存也是其中一个限制。

因为游标其实是相当于把磁盘数据整体放入了内存中,如果游标数据量大则会造成内存不足,内存不足带来的影响大家都知道了。

所以,在数据量小时才使用游标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值