Oracle游标
好处:1。减少网络流量 2。可以实现遍历 3。直接利用游标更新数据,直接引用表中的行
类型:
1。静态游标 2。引用游标(动态游标)
静态游标:由用户定义(隐式游标、显示游标)结果集不变
REF游标:结果集变化
隐式游标:用DML操作时,自动使用隐式游标。我们可以使用隐式游标判断SQL语句执行结果
自动声明和处理的。在Session会话区,开启游标。处理后自动关闭。可以返回单行查询。
隐式游标使用:
declare
%NOTFOUND -- 执行行没有找到。
%FOUND --执行行找到
%ROWCOUNT --游标影响行数
%ISOPEN -- 当前游标是否打开
begin
insert int places values (2,Beijing);
dbms_output_putline('游标所影响的行数' || to_char(SQL%ROWCOUNT));
end;
显示游标:用户定义的游标.用户自动管理
open、fetch、close
由用户控制。
必须首先声明。
declare
cursor myCur is select * from emp;
oneRow emp%rowtype;
myInt int:=0;
begin
open myCur;
fetch myCur into oneRow;
dbms_output.put_line(oneRow.ename);
close myCur;
end;
/
declare
cursor myCur is select * from emp;
oneRow emp%rowtype;
myInt int:=0;
begin
open myCur;
loop
fetch myCur into oneRow;
dbms_output.put_line(oneRow.ename);
exit when myCur%notFound;
end loop;
close myCur;
end;
declare
cursor myCur is select * from emp;
oneRow emp%rowtype;
myInt int:=0;
begin
open myCur;
fetch myCur into oneRow;
while (myCur%found)
loop
dbms_output.put_line(oneRow.ename);
dbms_output.put_line(myCur%rowCount);
fetch myCur into oneRow;
end loop;
close myCur;
end;
/
///
for 循环
declare
cursor myCur is select * from emp;
oneRow emp%rowtype;
myInt int:=0;
begin
for emprow in myCur loop
dbms_output.put_line(emprow.ename);
end loop;
end;
/