怎么样遍历一个给定表的全部字段。我们一般的做法是
CURSOR TABLE_NAME_CUR IS SELECT * FROM TABLE_NAME;
TABLE_NAME_REC TABLE_NAME_CUR%ROWTYPE;
然后遍历TABLE_NAME_REC中的每一个字段就可以了。可现在的问题是由于TABLE_NAME是动态给定的,是个参数,因此它里面的字段也是不确定的。
那应该怎么样来遍历呢?请高人指点。

解决方案 »

  1.   

    from asktomcreate or replace procedure print_table( p_query in varchar2 )
    AUTHID CURRENT_USER
    is
        l_theCursor     integer default dbms_sql.open_cursor;
        l_columnValue   varchar2(4000);
        l_status        integer;
        l_descTbl       dbms_sql.desc_tab;
        l_colCnt        number;
    begin
        execute immediate
        'alter session set 
            nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';    dbms_sql.parse(  l_theCursor,  p_query, dbms_sql.native );
        dbms_sql.describe_columns
        ( l_theCursor, l_colCnt, l_descTbl );    for i in 1 .. l_colCnt loop
            dbms_sql.define_column
            (l_theCursor, i, l_columnValue, 4000);
        end loop;    l_status := dbms_sql.execute(l_theCursor);    while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
            for i in 1 .. l_colCnt loop
                dbms_sql.column_value
                ( l_theCursor, i, l_columnValue );
                dbms_output.put_line
                ( rpad( l_descTbl(i).col_name, 30 )
                  || ': ' || 
                  l_columnValue );
            end loop;
            dbms_output.put_line( '-----------------' );
        end loop;
        execute immediate
            'alter session set nls_date_format=''dd-MON-rr'' ';
    exception
        when others then
          execute immediate
              'alter session set nls_date_format=''dd-MON-rr'' ';
          raise;
    end;
    /T@orcl>exec print_table('select * from scott.emp where empno =7934');
    EMPNO                         : 7934
    ENAME                         : MILLER
    JOB                           : CLERK
    MGR                           : 7782
    HIREDATE                      : 23-jan-1982 00:00:00
    SAL                           : 1300
    COMM                          :
    DEPTNO                        : 10
    -----------------
      

  2.   

    感谢tom_cheung我还没有具体的理解,但这个结果正是我想要的非常感谢!!!