游标概述:
隐式游标:
使用隐式游标的好处oracle自动为我们处理很多和游标相关的操作,缺点是代码中存在大量相同或相似select语句,不利于代码的重用,隐式游标用在只返回单行结果集的情况下。如果要返回多行,则必须用显示游标或者带bulk
collect 子句的select语句
显示游标:
显示游标用在需要多行记录的情况下
采用显示游标,一般需要以下这些步骤:解析 绑定 打开 执行 提取 关闭
p书80
1》游标属性简介:
PL/SQL提供了六个游标属性,无论是隐式还是显示都支持:%found %nofound %rowcount %isopen
%bulk_rowcount %bulk_exception p书81
2》隐式游标
v_name varchar2(50);
begin
select ename into v_name from emp where empno=1;
dbms_output.put_line(v_name);
end;
3》显示游标
静态游标:
declare
cursor cur_jing for select ename from emp;
v_name varchar2(50);
begin
open cur_jing;
feach cur_jing 游标名 into v_name 记录或变量列表;
for x in 1..v_name.count loop
end loop;
close cur_jing;
end;
动态游标:
declare
type cur_dong is ref cursor;
v_dong cur_dong;
v_name varchar2(50);
begin
open v_dong for select ename from emp;
-- 指向结果集的表数据
feach v_dong into v_name;
dbms_output.put_line(v_name);
exit when
v_dong%notfound;
end;
-- 动态游标 系统游标
declare
v_cursor
sys_refcursor;
v_emp
emp.ename%type;
begin
open
v_cursor for select ename from emp;
loop
-- 指向结果集的表数据
fetch v_cursor into v_emp;
dbms_output.put_line(v_emp);
exit when v_cursor%notfound;
end
loop;
end;
动态游标和静态游标的比较
应用bulk collect
declare
cursor cur_emp is select * from emp;
type row_emp is table of varchar2 index by
binary_integer;
row_emp row_emp_type;
begin
open cur_emp;
fetch cur_emp bulk collect into
row_emp;
for x 1..row_emp.cout loop
dbms_output.put_line(cur_emp(x));
end loop;
end;