定义一个函数,就一个参数,是传入的select语句,返回一个记录集。
网上说可以使用table()来做,但是实验了很多次都解决不了,求高手指点。
------解决方案--------------------
ChenZw> CREATE OR REPLACE TYPE TABLEOFTAPEVARCHAR2 IS TABLE OF NUMBER;
2 /
类型已创建。
ChenZw> CREATE OR REPLACE FUNCTION GETDATA
2 RETURN TABLEOFTAPEVARCHAR2
3 IS
4 BEGIN
5 RETURN TABLEOFTAPEVARCHAR2('1','2','3');
6 END;
7 /
函数已创建。
ChenZw> SELECT * FROM TABLE(GETDATA);
COLUMN_VALUE
------------
1
2
3
已选择3行。
------解决方案--------------------
--这个函数允许你输入一个select语句并返回一个游标变量
CREATE OR REPLACE FUNCTION REF_EMP(V_S IN VARCHAR2) RETURN SYS_REFCURSOR IS
REF_EMP SYS_REFCURSOR;
BEGIN
OPEN REF_EMP FOR V_S;
RETURN REF_EMP;
END;
DECLARE
V_SQL VARCHAR2(100) := 'SELECT * FROM emp'; --这个就是你输入的select
V_EMP EMP%ROWTYPE;
V_EMP_REF SYS_REFCURSOR;
BEGIN
V_EMP_REF := REF_EMP(V_SQL);--调用函数
FETCH V_EMP_REF
INTO V_EMP;
LOOP
EXIT WHEN V_EMP_REF%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
FETCH V_EMP_REF
INTO V_EMP;
END LOOP;
CLOSE V_EMP_REF;
END;