0

是否可以调用从 SELECT 语句返回 REF 游标的游标?

编辑 我需要可变数量的返回字段,因此流水线表对我的目的没有用。

IE。

SELECT GetFields('field1, field2', flh_tout_name)
     FROM ENI_FLUSSI_HUB c
    WHERE flh_id_messaggio = '1'

函数GetFields(字段,vFlhToutName);vQuery := 'SELECT' || 字段 || '来自' || vFlhToutName;

  return EXECUTE IMMEDIATE (vQuery);

结尾

4

1 回答 1

1

我不这么认为。您可以创建一个可以从选择中调用的流水线表函数。在此处查看我的答案循环值,创建动态查询并添加到结果集

另见http://psoug.org/reference/pipelined.html

基本上,您需要创建一个代表结果每一行的类型。然后你创建一个表类型,它是你的行类型的表。

CREATE TYPE MyRowType AS OBJECT(ID NUMBER, VALUE VARCHAR2(10));

CREATE TYPE MyTableType AS TABLE OF MyRowType;

然后你的函数应该返回 MyTableType:

CREATE FUNCTION TestTableFunctions (lookup_Value VARCHAR2) 
RETURNS MytableType
AS
    TYPE r_cursor IS REF CURSOR;
    query_results r_cursor;
    results_out MyRowType := MyRowType(NULL, NULL);
BEGIN

OPEN query_results FOR
SELECT
    ID,
    Value
FROM
    MyTable
WHERE
    LookupValue = Lookup_Value;

LOOP
    FETCH query_results INTO 
        results_out.ID,
        results_out.Value;
    EXIT WHEN query_results%NOTFOUND;

    PIPE ROW(results_out);
END LOOP;

CLOSE query_results;
END TestTableFunctions;

然后你可以打电话:

SELECT * FROM TABLE(TestTableFunctions('abcd'))
于 2012-10-15T14:05:08.857 回答