创建过程,通过sys_refcursor创建一个游标
CREATE OR REPLACE PROCEDURE getcursor
(
v_cur out sys_refcursor--输出游标
)
IS
BEGIN
open v_cur for select * from myemp;--打开游标,并写查询语句,用关键字for连接
END;
/
使用
declare
mycur sys_refcursor;--声明游标
emps myemp%ROWTYPE;--定义一个结构和myemp一样的记录类型变量
begin
getcursor(mycur); --这样这个游标就有值了
LOOP
FETCH mycur INTO emps;--从游标中获取数据
dbms_output.put_line(emps.ename);
EXIT WHEN mycur%NOTFOUND;
END LOOP;
CLOSE mycur;
end;
/
第二种方式:在包中创建游标类型,然后在过程中通过包调用游标
create or replace package mypac
as
type type_cursor is ref cursor;==ref cursor定义游标类型
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
/
--创建返回游标的存储过程
create or replace procedure mypro
(
cur_out_arg out mypac.type_cursor
)
is
begin
open cur_out_arg for select * from myemp;
end;
/