有時候表的一行記錄太長,使用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 [email protected]
信息科學與技術學院研究生,窗口與網絡編程課程老師
123456
ENO ENAME EGENDER BIRTHDAY DNO EPOSITION
-------------------- ---------------------------------------- ---------------------- -------------------- ----------------------------------------
EPHONENO EMAIL
------------------------------------------------------------------------------------------------------------------------
SELFINTRODUCE
----------------------------------------------------------------------------------------------------------------------------------------------------------------
PASSWD
----------------------------------------
10002 ewww2006 男 08-8月 -88 001 manager
12414412141 [email protected]
信息科學與技術學院研究生,窗口與網絡編程課程老師
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 : [email protected]
SELFINTRODUCE : 信息科學與技術學院研究生,窗口與網絡編程課程老師
PASSWD : 123456
[Row:1]---------------------------------------------------
ENO : 10002
ENAME : ewww2006
EGENDER : 男
BIRTHDAY : 08-8月 -88
DNO : 001
EPOSITION : manager
EPHONENO : 12414412141
EMAIL : [email protected]
SELFINTRODUCE : 信息科學與技術學院研究生,窗口與網絡編程課程老師
PASSWD : 123456
[Row:2]---------------------------------------------------
PL/SQL 過程已成功完成。
SQL>
結果好看多了