【问题标题】:Oracle SQL - function returning result setOracle SQL - 函数返回结果集
【发布时间】:2014-05-06 15:04:04
【问题描述】:

我有一个关于 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。 对此有什么建议,或者至少知道要进行哪些更改才能使其正常工作,以便我的函数可以返回我需要的结果集?

【问题讨论】:

    标签: sql oracle function sys-refcursor


    【解决方案1】:

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

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

    【讨论】:

    • 感谢吉姆的快速回答,我会对此进行测试,并让您知道它是否对我有用。再次感谢您
    • 我在编译时收到错误 - 错误 (2,26): PLS-00103: 在期望以下之一时遇到符号“REF”:array varray table object fixed varying opaque sparse
    • 我只是在功能开始时做了一些小改动,它就像一个魅力!非常感谢我的朋友!
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多