Oracle存储过程将行集作为out参数返回

时间:2019-02-18 19:50:40

标签: oracle stored-procedures plsql

我需要一些有关过程的帮助,我需要从Oracle存储过程返回类似结构的表。

我的要求如下:

  1. 我的项目将有一个主过程,将从外部系统调用
  2. 该过程将从内部调用多个函数,这些函数将返回一个值。就像 Function_1返回10 Function_2返回20
  3. 现在,在接收到该值之后,我需要将数据作为键值结构返回给过程的调用方法。喜欢

    KEY        | VALUE
    -----------+-----------
    Function_1 |  10
    Function_2 |  20
    

我的约束是我无法创建临时表来实现此功能。因此,我看到了带有ref游标的一个选项,但是如何使用此值填充游标。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用管道函数(而不是过程):

Oracle设置

CREATE TYPE KeyValuePair AS Object(
  key   VARCHAR2(20),
  value NUMBER(8)
);
/
CREATE TYPE KeyValuePairList AS TABLE OF KeyValuePair;
/
CREATE FUNCTION function1 RETURN NUMBER AS BEGIN RETURN 10; END;
/
CREATE FUNCTION function2 RETURN NUMBER AS BEGIN RETURN 20; END;
/

CREATE FUNCTION mainFunc RETURN KeyValuePairList PIPELINED
AS
BEGIN
  PIPE ROW ( KeyValuePair( 'FUNCTION1', function1() ) );
  PIPE ROW ( KeyValuePair( 'FUNCTION2', function2() ) );
END;
/

查询

SELECT *
FROM   TABLE( mainFunc() );

输出

KEY       | VALUE
:-------- | ----:
FUNCTION1 |    10
FUNCTION2 |    20

db <>提琴here


或作为一个过程

CREATE PROCEDURE mainFunc (
  o_cursor OUT SYS_REFCURSOR
)
AS
BEGIN
  OPEN o_cursor FOR
    SELECT 'FUNCTION1'  AS key, function1() AS value FROM DUAL UNION ALL
    SELECT 'FUNCTION2'  AS key, function2() AS value FROM DUAL;
END;
/

db <>提琴here