加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle中print_table存储过程介绍

发布时间:2020-12-12 13:46:53 所属栏目:百科 来源:网络整理
导读:一直以来,觉得MySQL中使用G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能。只是我们这些凡夫俗子不知道而已,特意

一直以来,觉得MySQL中使用G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_table实现了类似这样的功能。只是我们这些凡夫俗子不知道而已,特意整理在此,方便自己或有需要的人以后查看。

?

CREATE?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,l_columnvalue); 
??????????? dbms_output.Put_line (RPAD(L_desctbl(i).col_name,30) 
????????????????????????????????? || ‘: ‘?
????????????????????????????????? || l_columnvalue); 
??????? END LOOP; 
?
??????? dbms_output.put_line(‘-----------------‘); 
??? 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; 
/ 

?

如下测试所示:

?

SQL> set serveroutput on?size 99999;
SQL> execute print_table(‘select * from v$session where sid=997‘);
SADDR???????????????????????? : 000000085FA35CA0
SID?????????????????????????? : 997
SERIAL#?????????????????????? : 1
AUDSID??????????????????????? : 0
PADDR???????????????????????? : 000000085F6B7E70
USER#???????????????????????? : 0
USERNAME????????????????????? :
COMMAND?????????????????????? : 0
OWNERID?????????????????????? : 2147483644
TADDR???????????????????????? :
LOCKWAIT????????????????????? :
STATUS??????????????????????? : ACTIVE
SERVER??????????????????????? : DEDICATED
SCHEMA#?????????????????????? : 0
SCHEMANAME??????????????????? : SYS
OSUSER??????????????????????? : oracle
PROCESS?????????????????????? : 5036
MACHINE?????????????????????? : xxxx
PORT????????????????????????? : 0
TERMINAL????????????????????? : UNKNOWN
PROGRAM?????????????????????? : [email?protected] (DBW0)
TYPE????????????????????????? : BACKGROUND
SQL_ADDRESS?????????????????? : 00
SQL_HASH_VALUE??????????????? : 0
SQL_ID??????????????????????? :
SQL_CHILD_NUMBER????????????? : 0
PREV_SQL_ADDR???????????????? : 00
PREV_HASH_VALUE?????????????? : 0
PREV_SQL_ID?????????????????? :
PREV_CHILD_NUMBER???????????? : 0
PLSQL_ENTRY_OBJECT_ID???????? :
PLSQL_ENTRY_SUBPROGRAM_ID???? :
PLSQL_OBJECT_ID?????????????? :
PLSQL_SUBPROGRAM_ID?????????? :
MODULE??????????????????????? :
MODULE_HASH?????????????????? : 0
ACTION??????????????????????? :
ACTION_HASH?????????????????? : 0
CLIENT_INFO?????????????????? :
FIXED_TABLE_SEQUENCE????????? : 0
ROW_WAIT_OBJ#???????????????? : -1
ROW_WAIT_FILE#??????????????? : 0
ROW_WAIT_BLOCK#?????????????? : 0
ROW_WAIT_ROW#???????????????? : 0
LOGON_TIME??????????????????? : 04-jul-2018 21:15:52
LAST_CALL_ET????????????????? : 5272838
PDML_ENABLED????????????????? : NO
FAILOVER_TYPE???????????????? : NONE
FAILOVER_METHOD?????????????? : NONE
FAILED_OVER?????????????????? : NO
RESOURCE_CONSUMER_GROUP?????? :
PDML_STATUS?????????????????? : DISABLED
PDDL_STATUS?????????????????? : DISABLED
PQ_STATUS???????????????????? : DISABLED
CURRENT_QUEUE_DURATION??????? : 0
CLIENT_IDENTIFIER???????????? :
BLOCKING_SESSION_STATUS?????? : NO HOLDER
BLOCKING_INSTANCE???????????? :
BLOCKING_SESSION????????????? :
SEQ#????????????????????????? : 34697
EVENT#??????????????????????? : 3
EVENT???????????????????????? : rdbms ipc message
P1TEXT??????????????????????? : timeout
P1??????????????????????????? : 300
P1RAW???????????????????????? : 000000000000012C
P2TEXT??????????????????????? :
P2??????????????????????????? : 0
P2RAW???????????????????????? : 00
P3TEXT??????????????????????? :
P3??????????????????????????? : 0
P3RAW???????????????????????? : 00
WAIT_CLASS_ID???????????????? : 2723168908
WAIT_CLASS#?????????????????? : 6
WAIT_CLASS??????????????????? : Idle
WAIT_TIME???????????????????? : 0
SECONDS_IN_WAIT?????????????? : 107
STATE???????????????????????? : WAITING
SERVICE_NAME????????????????? : SYS$BACKGROUND
SQL_TRACE???????????????????? : DISABLED
SQL_TRACE_WAITS?????????????? : FALSE
SQL_TRACE_BINDS?????????????? : FALSE
ECID????????????????????????? :
-----------------
PL/SQL?procedure successfully completed.
SQL> 

?

?

参考资料:

?

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1035431863958,%7Bprint_table%7D

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读