1

我有一个关于 Oracle SQL 4.0.0 版本的问题......它是关于应该返回小数据集的函数

所以程序有 3 个传入参数和数据集作为输出......这就是我到目前为止所拥有的

CREATE OR REPLACE FUNCTION "PARTS"(a IN VARCHAR,
                                   b IN VARCHAR2,
                                   c IN VARCHAR2)
  RETURN SYS_REFCURSOR
AS
  final       SYS_REFCURSOR;
  par         VARCHAR(32);
  description VARCHAR(32);
  inputvars   VARCHAR(1024);
  a1          VARCHAR(32);
  BEGIN

    IF a IS NULL THEN
      a1 := 'NOT_REQD';
    ELSE
      a1 := a;
    END IF;

    OPEN final FOR
      SELECT substr(number1, 3)
      INTO par
        , description1
      FROM class_event_element
      WHERE substr(a, 4) = a1
            AND name = b
            AND vart = c;

    RETURN final;

    EXCEPTION
      WHEN no_data_found THEN RETURN ('NONE');
      WHEN OTHERS THEN RETURN ('ERROR');
  END;

所以这个函数的解释是我想多次调用它,这就是为什么我把它放在第一位。所以我在表中的数据可以,但它不必有一个,这就是我有 IF 的原因。

然后我只有简单的 Select 语句,我需要 substr 函数作为数字。

我的主要问题是,在谷歌搜索了半天之后......我无法弄清楚如何返回我的 SYS_REFCURSOR Final。对此是否有任何建议,或者至少知道要更改哪些内容才能使其正常工作,以便我的函数可以返回我需要的结果集?

4

1 回答 1

2

使用这组“启动器”更改,同时删除 into 子句:

TYPE ResultSet is REF CURSOR;

create or replace PROCEDURE  PARTS (iclassname IN varchar, idevice_name IN varchar2,  idevice_variant IN varchar2, partsfinal out Resultset)

AS


part varchar2(32):=NULL;
description varchar(32):=NULL;
inputvars varchar2(1024):=NULL;
classname1 varchar2(32):=NULL;

begin

IF iclassname is null THEN
classname1 := 'NOT_REQD';
ELSE 
classname1 := iclassname;
END IF;

OPEN partsFinal FOR SELECT substr(partnumber1,3) part, partdescription1 
   FROM         
   lookup_atm_class_event_element
WHERE 
   substr(classname,4) = classname1
   and device_name = idevice_name
   and device_variant = idevice_variant;

RETURN;

exception
when others then
  open partsfinal for select 'ERR', 'Error' from dual;
end;

您将需要调整错误返回部分以反映调用此过程以处理错误的代码所需的内容。

于 2014-05-06T15:23:58.667 回答