游标就是移动的光标,可以用来逐条或批量的处理数据。当游标移动到某行时,即可对该行数据进行操作,如提取数据等。
游标有一下四个属性,即这四个属性仅可被用于游标上:%isopen判断游标是否被打开,值为true或false;%found和%notfound判断游标所在行是否有效,一般没有数据了既是无效,值也是true或false;%rowcount返回的是当前位置为止游标读取的记录行数。
比如我有一个users表,存储用户名和密码等信息,现在我想用游标对数据进行遍历处理,我就可以这样写:
declare
v_username users.username%type;
v_password users.password%type;
cursor c is select t.username,t.password from users t;
begin
open c;
loop
fetch c into v_username,v_password;
exit when c%notfound;
dbms_output.put_line('用户'||v_username||'的密码是'||v_password);
end loop;
dbms_output.put_line('一共有'||c%rowcount||'条记录');
close c;
end;
第二三行定义变量,用于获得游标当前位置的数据,为了防止数据类型不一致,可以用“表名.列名%type”的形式获取到合适的数据类型,即如果表users中列username的数据类型是varchar的话,那么v_username的数据类型也是varchar。后面还会给出另一种获得数据类型的方式。
<