我有以下情况:
CREATE OR REPLACE FUNCTION GET_CURSOR_PIPELINE(placeholder IN NUMBER)
RETURN MY_RECORD_TYPE PIPELINED IS
TYPE CURSOR_TYPE IS REF CURSOR;
myCursor CURSOR_TYPE;
TYPE RECORD_TYPE IS RECORD(
record_id NUMBER,
firstname VARCHAR(50)
);
resultSet RECORD_TYPE;
BEGIN
OPEN myCursor FOR
SELECT 1, 'Scott' FROM DUAL
UNION
SELECT 2, 'Tiger' FROM DUAL;
IF (myCursor IS NOT NULL) THEN
LOOP
FETCH myCursor INTO resultSet;
EXIT WHEN myCursor%NOTFOUND;
PIPE ROW (MY_RECORD_OBJ(
resultSet.record_id,
resultSet.firstname
));
END LOOP;
CLOSE myCursor;
END IF;
END GET_CURSOR_PIPELINE;
Run Code Online (Sandbox Code Playgroud)
我的生产代码和上面的示例之间的唯一区别是我需要从真实表中获取大约20个字段,而不仅仅是来自DUAL的2个字段.
我想避免使用锅炉代码,我必须明确列出所有涉及的字段.上面的函数工作正常,但我必须定义所有涉及的字段3次.该拳的时间,当我将返回类型定义.
CREATE …Run Code Online (Sandbox Code Playgroud)