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