1 基本知识
declare 定义游标
open 打开游标
fetch 从游标中取一行数据,每一次提取数据后,游标都指向结果集的下一行
close 关闭游标,使游标失去作用,并且结果集变成未定义,游标关闭可以重开
declare cursor v_cursor is -- 定义游标 select * from dual; v_table dual%ROWTYPE; --表类型 v_name dual.dummy%type; --列类型 begin open v_cursor; --打开游标 loop fetch v_cursor -- 取数据 into v_table; exit when v_cursor %NOTFOUND; dbms_output.put_line(v_table.dummy); end loop; close v_cursor; -- 关闭游标 end;
例子:数据迁移
2 游标属性
显示游标属性
%found 布尔属性
%notfound
%isopen 布尔属性
%rowcount:此数字属性返回目前为止游标返回行的数目,如果在相关 联的游标还没有打开进行引用,会返回错误,fetch之前是0.
隐式游标属性
同上,只不过针对的是insert,update,delete和select into
例子 declare v_table dual%ROWTYPE; --表类型 v_name dual.dummy%type; --列类型 begin select * into v_table from dual; if SQL%Found then dbms_output.put_line(v_table.dummy); end if; end; declare v_name table1.dummy%type := 'Y'; --列类型 begin update table1 set dual.dummy = v_name ; if SQL%Found then dbms_output.put_line(SQL%Rowcount); end if; end;