Oracle SQL-返回结果集的函数

Oracle SQL-返回结果集的函数,sql,oracle,function,sys-refcursor,Sql,Oracle,Function,Sys Refcursor,我有一个关于Oracle SQL 4.0.0版本的问题。。。它是关于应该返回小数据集的函数 所以程序有3个输入参数和数据集作为输出。。。这就是我目前所拥有的 CREATE OR REPLACE FUNCTION "PARTS"(a IN VARCHAR, b IN VARCHAR2, c IN VARCHAR2) RETURN SYS_REFCURSOR

我有一个关于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\u REFCURSOR Final。 关于这一点,是否有任何建议,或者至少知道如何更改才能使其正常工作,以便我的函数可以返回我需要的结果集?

使用这组“起始”更改,同时删除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;

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

谢谢您的快速回答Jim,我将对此进行测试,并让您知道它是否适用于我。再次感谢您againI在编译时收到错误-错误(2,26):PLS-00103:在预期以下情况之一时遇到符号“REF”:数组varray表对象修复了可变不透明sparseI我只是在函数开始时做了一些小更改,它工作得很好!非常感谢你,我的朋友!