如何调用out in cursor中的oracle过程

时间:2017-03-29 10:57:19

标签: oracle stored-procedures plsql

我有这个程序,我想知道如何在PL / SQL中执行它。有人可以帮助我吗?

create or replace PROCEDURE "P_TEST" 
 (
    c$inchidere  IN OUT  softys.pk_utils.GenericCursor,
    p_OLD IN   empl.code%type,
    p_NEW IN   empl.code%type,
    p_NXT IN   empl.code%type,
    p_ORGID IN   empl.ORGID%type
  )
is
begin
    open c$inchidere  for
        select
     ...

end

1 个答案:

答案 0 :(得分:1)

在PL / SQL中调用过程很简单。棘手的部分是阅读REF CURSOR。我们需要将其提取到变量或记录类型,匹配已执行查询的投影。您的代码使用名为softys.pk_utils.GenericCursor的内容会让我觉得您可能会遇到问题。

无论如何,这个例子假设结果集返回一个数字列。您需要调整目标变量以匹配实际投影。

declare
    rc sys_refcursor;
    l_id number;
begin

    P_TEST (
       c$inchidere  => rc,
      p_OLD => 'whatever',
      p_NEW => 'meh',
      p_NXT => 'ABC',
      p_ORGID => 123456  );
    loop
        fetch rc into l_id;
        exit when rc%notfound;
    end loop;
end;

不确定为什么ref cursor参数被定义为IN OUT。当你立即打开它时,它只需要OUT。