定义一个函数,就一个参数,是传入的select语句,返回一个记录集。
网上说可以使用table()来做,但是实验了很多次都解决不了,求高手指点。

解决方案 »

  1.   

    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行。
      

  2.   

    多谢贝壳碎片的回复。
    我现在搞不定的是,传入的select语句是动态的,并且列数是不固定的
      

  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;