和我一起恶补pl/sql(第三讲)
隔了好多天才写第三篇,主要是对游标的探讨
游标:作用:遍历一个查询结果,是对查询结果的一种标记,可以对结果进行操作或者选择行输出,简单地说:游标就是你对一个已经查询的结果做一次for循环,从第一条读到最后一条,行话叫遍历。
oracle游标是pl/sql的重要组成部分,在pl/sql中,当查询结果超过一行时的,就需要用到游标,游标是sql的一个内存工作区,由系统或用户已变量形式定义,作用是用于临时存储从数据库中提取的数据块。在某些时候,需要把数据从存放在磁盘的表中调用到计算机内存中进行处理,否则频繁的磁盘数据交换会降低效率。
游标有两种类型:显式游标或隐式游标,比如select ...into...查询语句,一次只能从数据库提取一行数据,对于这种形式的查询和dwl操作,系统会使用一个隐式的游标。但是如果要是提取多行数据,就要程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的select语句。游标一旦打开,数据就从数据库传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
语法规则学习:
游标声明:
cursor mycur(type number) is
select empno,empcc from cus_emp where comno = type;
游标打开:
open mycur(100);
读取游标:
fetch mycur into varno,varprice;
关闭游标:
close mycur;
游标的属性:
%isopen ,%found ,%notfound ,%rowcount
%isopen:判断是否打开
%found:判断游标所在的行是否有效
%rowcount:返回当前的位置为止游标读取的记录的行数
游标的for循环:
declare cursor c1 is
select name,sal,dep from emp;
....
begin
for emp_re in c1 Loop
....
sal_tol :=sal_tol+emp.sal;
end loop
end;
open --fetch --close 可以用for循环代替,for循环会自动打开,关闭游标。
好了游标基本就是这个样子了,相信还是很简单,但是很重要的内容,以后我还会讲过程的详细用法。