我需要一些有关过程的帮助,我需要从Oracle存储过程返回类似结构的表。
我的要求如下:
现在,在接收到该值之后,我需要将数据作为键值结构返回给过程的调用方法。喜欢
KEY | VALUE
-----------+-----------
Function_1 | 10
Function_2 | 20
我的约束是我无法创建临时表来实现此功能。因此,我看到了带有ref游标的一个选项,但是如何使用此值填充游标。
谢谢。
答案 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