游标(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;
以上输出结果相同,如下:

数据库游标的作用及优缺点
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。
游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。
大部分程序数据设计语言都能使用游标来检索SQL数据库中的数据,在程序中嵌入游标和在程序中嵌入SQL语句相同
因为我们做的数据量大,而且系统上跑的不只我们一个业务。所以,我们都要求尽量避免使用游标,游标使用时会对行加锁,可能会影响其他业务的正常进行。而且,数据量大时其效率也较低效。另外,内存也是其中一个限制。
因为游标其实是相当于把磁盘数据整体放入了内存中,如果游标数据量大则会造成内存不足,内存不足带来的影响大家都知道了。
所以,在数据量小时才使用游标
本文介绍了数据库游标的定义、作用及使用方法,并通过两个具体的Oracle SQL示例解释了如何使用带参数和不带参数的显式游标。同时,讨论了游标的优缺点,尤其是在大数据量场景下的适用性和局限性。
3254

被折叠的 条评论
为什么被折叠?



