需求大概是这样的
我传递的参数为表名,
  
 type ref_cur is ref cursor;
 v_alltab     ref_cur; open v_alltab for s_tab ;
       loop
         fetch v_alltab into crd_record;
       end loop;
 close v_alltab;  
因为是动态传递的表名,所以crd_record 这里不知道如何定义,我需要把结果取出来,把表里每一个字段值都需要取出来。

解决方案 »

  1.   

    那就用动态SQL去拼吧,看你要实现什么功能。
      

  2.   

    做不了。
    因为PL/SQL不支持动态的类型定义。
    再有PL/SQL也不存在通用的数据类型。
      

  3.   

    lz 你那段cursor 想要干嘛,如果要建表 是可以使用动态sql
      

  4.   


    CREATE OR REPLACE PROCEDURE P_COLVALBYTABNM(TABNM    VARCHAR2,
                                                COLVALUE OUT SYS_REFCURSOR) AS
      V_SQL_COLNM VARCHAR2(4000);
      V_TABNM     VARCHAR2(50);
      V_COLNM     VARCHAR2(4000);
      V_SQL       VARCHAR2(4000);
      CURSOR COL_CUR(C_TABNM) IS
        SELECT T.COLUMN_NAME
          FROM USER_TAB_COLUMNS T
         WHERE T.TABLE_NAME = C_TABNM
         ORDER BY COLUMN_ID;
    BEGIN
      FOR C IN COL_CUR(TABNM) LOOP
        V_SQL_COLNM := V_SQL_COLNM || C.COLUMN_NAME || ',';
      END LOOP;
      V_SQL_COLNM := SUBSTR(V_SQL_COLNM, 1, LENGTH(V_SQL_COLNM) - 1);
      OPEN COLVALUE FOR 'SELECT ' || V_SQL_COLNM || ' FROM ' || V_TABNM;
    END P_COLVALBYTABNM;看看是不是这种情况