有时候表的一行记录太长,使用select * from tablename,显示的结果可读性很差。使用一个存储过程会使结果漂亮很多。先看下下面这个表
SQL> select *from employee;
ENO ENAME EGENDER BIRTHDAY DNO EPOSITION
-------------------- ---------------------------------------- ---------------------- -------------------- ----------------------------------------
EPHONENO EMAIL
------------------------------------------------------------------------------------------------------------------------
SELFINTRODUCE
----------------------------------------------------------------------------------------------------------------------------------------------------------------
PASSWD
----------------------------------------
10001 ewww2006 男 08-8月 -88 001 manager
12414412141 ewww2006@qq.com
信息科学与技术学院研究生,窗口与网络编程课程老师
123456
ENO ENAME EGENDER BIRTHDAY DNO EPOSITION
-------------------- ---------------------------------------- ---------------------- -------------------- ----------------------------------------
EPHONENO EMAIL
------------------------------------------------------------------------------------------------------------------------
SELFINTRODUCE
----------------------------------------------------------------------------------------------------------------------------------------------------------------
PASSWD
----------------------------------------
10002 ewww2006 男 08-8月 -88 001 manager
12414412141 ewww2006@qq.com
信息科学与技术学院研究生,窗口与网络编程课程老师
123456
可读性很差,建立下面的存储过程
create or replacePROCEDURE print_table( p_query in varchar2 )
AUTHID CURRENT_USER
IS
l_theCursor integerdefault dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_descTbl dbms_sql.desc_tab;
l_colCnt number;
l_rowCnt number:=1;
BEGIN
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( '[Row:'||l_rowCnt||']---------------------------------------------------');
l_rowCnt := l_rowCnt+ 1;
end loop;
EXCEPTION
when others then
dbms_sql.close_cursor( l_theCursor );
RAISE;
END print_table;
/
重新执行
SQL> execprint_table('select * from employee');
ENO : 10001
ENAME : ewww2006
EGENDER : 男
BIRTHDAY : 08-8月 -88
DNO : 001
EPOSITION : manager
EPHONENO : 12414412141
EMAIL : ewww2006@qq.com
SELFINTRODUCE : 信息科学与技术学院研究生,窗口与网络编程课程老师
PASSWD : 123456
[Row:1]---------------------------------------------------
ENO : 10002
ENAME : ewww2006
EGENDER : 男
BIRTHDAY : 08-8月 -88
DNO : 001
EPOSITION : manager
EPHONENO : 12414412141
EMAIL : ewww2006@qq.com
SELFINTRODUCE : 信息科学与技术学院研究生,窗口与网络编程课程老师
PASSWD : 123456
[Row:2]---------------------------------------------------
PL/SQL 过程已成功完成。
SQL>
结果好看多了