oracle 中 print_table 存储过程介绍

2018 年 9 月 8 日 ImportNew

(点击上方公众号,可快速关注)


来源:潇湘隐者 ,

www.cnblogs.com/kerrycode/p/9581464.html


一直以来,觉得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, 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; 

/


如下测试所示:


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                       : oracle@xxxxx (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


【关于投稿】


如果大家有原创好文投稿,请直接给公号发送留言。


① 留言格式:
【投稿】+《 文章标题》+ 文章链接

② 示例:
【投稿】《不要自称是程序员,我十多年的 IT 职场总结》:http://blog.jobbole.com/94148/

③ 最后请附上您的个人简介哈~



看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能

登录查看更多
0

相关内容

SQL 全名是结构化查询语言,是用于数据库中的标准数据查询语言,IBM 公司最早使用在其开发的数据库系统中。
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
30+阅读 · 2020年4月12日
简明扼要!Python教程手册,206页pdf
专知会员服务
48+阅读 · 2020年3月24日
100+篇《自监督学习(Self-Supervised Learning)》论文最新合集
专知会员服务
165+阅读 · 2020年3月18日
强化学习最新教程,17页pdf
专知会员服务
177+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
94+阅读 · 2019年10月10日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
GitHub 热门:别再用 print 输出来调试代码了
Python开发者
27+阅读 · 2019年4月24日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
弱监督语义分割最新方法资源列表
专知
9+阅读 · 2019年2月26日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
隐马尔科夫模型 python 实现简单拼音输入法
Python开发者
3+阅读 · 2017年12月6日
python pandas 数据处理
Python技术博文
4+阅读 · 2017年8月30日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Risk-Aware Active Inverse Reinforcement Learning
Arxiv
7+阅读 · 2019年1月8日
Arxiv
5+阅读 · 2018年5月1日
VIP会员
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
GitHub 热门:别再用 print 输出来调试代码了
Python开发者
27+阅读 · 2019年4月24日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
弱监督语义分割最新方法资源列表
专知
9+阅读 · 2019年2月26日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
隐马尔科夫模型 python 实现简单拼音输入法
Python开发者
3+阅读 · 2017年12月6日
python pandas 数据处理
Python技术博文
4+阅读 · 2017年8月30日
Top
微信扫码咨询专知VIP会员