【问题标题】:Oracle pl/sql reference(return?) cursor/declared cursorOracle pl/sql 参考(返回?)游标/声明游标
【发布时间】:2014-03-20 07:50:14
【问题描述】:

有没有办法做这样的事情?将游标获取的数据输出到引用游标中而不先将其填充到表中?

create or replace procedure someprocedure
(
rc1 in out adv_refcur_pkg.rc)  -- this is defined below
as

v_class_year varchar(10);

cursor c1
is
select distinct e.pref_class_year
from entity e
where e.pref_class_year between i_start_class and i_end_class;

begin
open c1;
loop
fetch c1 into v_class_year;
EXIT WHEN c1%NOTFOUND;

end loop;
close c1;

open rc1 for select v_class_year from dual;
end;

这是 refcursor 的声明

CREATE OR REPLACE PACKAGE ADVANCE.adv_refcur_pkg
AS
TYPE RC IS REF CURSOR;
END adv_refcur_pkg;

【问题讨论】:

  • 只需打开rc1 游标即可查询c1 游标定义中使用的查询。

标签: sql oracle cursor


【解决方案1】:

根据这个例子,是的,有可能:

https://forums.oracle.com/thread/696634

【讨论】:

    【解决方案2】:

    既然可以简单地传递光标本身,为什么还要麻烦这样做呢?

    create or replace procedure someprocedure
    (
    rc1 in out adv_refcur_pkg.rc)  -- this is defined below
    as
    begin
    open rc1 for
       select distinct e.pref_class_year
         from entity e
        where e.pref_class_year between i_start_class and i_end_class;
    end;
    

    当您调用“someprocedure”时,您有一个打开的游标,您可以从中获取:

    BEGIN
    ...
      someprocedure(TheCursor);
      LOOP
        fetch TheCursor into v_class_year;
        exit when TheCursor%NOTFOUND;
        ...
      END LOOP;
      CLOSE TheCursor;
    ...
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多