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