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

oracle中print_table存储过程介绍的更多相关文章

  1. oracle中print_table存储过程实例介绍

    oracle中pro_print_table存储过程实例介绍 存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.这 ...

  2. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  3. oracle 中的存储过程

      oracle 中的存储过程 --oracle 中的存储过程, --不带任何参数的 CREATE OR REPLACE PROCEDURE PRO_TEST AS -- AS 和is 没有任何区别 ...

  4. ORACLE 中的 锁 介绍

    ORACLE 中的 锁 介绍 Oracle数据库支持多个用户同时与数据库进行交互,每个用户都可以同时运行自己的事务,从而也需要对并发访问进行控制.Oracle也是用“锁”的机制来防止各个事务之间的相互 ...

  5. 用sql语句导出oracle中的存储过程和函数

    用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...

  6. oracle中的存储过程例子

    用了两年Oracle还没写过存储过程,真是十分惭愧,从今天开始学习Oracle存储过程,完全零起点,争取每日一篇学习笔记,可能开始认识的不全面甚至有错误,但坚持下来一定会有收获. . 建立一个存储过程 ...

  7. Mybatis调用Oracle中的存储过程和function

    一.Mybatis调用存储过程 1 在数据库中创建以下的存储过程create or replace procedure pro_hello(p_user_name in varchar2,p_resu ...

  8. Oracle中的存储过程简单例子

    --创建表create table TESTTABLE(  id1  VARCHAR2(12),  name VARCHAR2(32))select t.id1,t.name from TESTTAB ...

  9. oracle中的存储过程(实例一)

    引子 这是测试环境存在了很久的问题.由于基础配置信息(如:代理人信息)不像生产环境有专人维护,常常会有数据过期,导致无法使用的情况. 而很多配置数据是在外围系统维护(如代理人信息,在销管系统)以往的解 ...

随机推荐

  1. Chapter 4 Invitations——5

    And that was the last contact I'd had with him, though he was there, a foot away from me, every day. ...

  2. 【Vue.js】vue引入组件报错:该组件未注册?

    [Vue warn]: Unknown custom element: <QuestionnaireOption> - did you register the component cor ...

  3. transform:scale()妙用——当下拉列表,图片无缝拉升 动画效果

      遇到问题 昨天在做音乐播放器的时候,遇到了一个这样的界面: 当下拉scroll区域列表的时候,图片会按照比例无缝连接放大,就想下面的效果图一样 分析问题 从上图可一看到,页面主要由两个div组成, ...

  4. Dubbo 源码解析四 —— 负载均衡LoadBalance

    欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 Dubbo 入门之二 --- 项目结构解析 Dubbo 源码分析系列之三 -- 架构原 ...

  5. SpringBoot系列——EnableScheduling,对定时器的支持

    前言 定时器功能在项目里面往往会用到,比如定时发送邮件.定时释放数据库资源:这里记录一下springboot对定时器的支持的简单实例 cron表达式 开始之前要先介绍一下cron表达式,这里当一下百度 ...

  6. Runtime详解(下)

    Runtime应用 1.Runtime 交换方法 应用场景:当第三方框架或者系统原生方法功能不能满足我们的时候,我们可以在保持系统原有功能的基础上,添加额外的功能. 需求:加载一张图片直接用系统的[U ...

  7. 个渣渣C语言之数组

    ---恢复内容开始--- 学c语言就知道数组.指针在c中有着特殊的地位.而且是必须掌握的一项知识,学会它会让你受益无穷. 一.数组 1.数组:室友一系列相同元素构成的.它连续的存储在内存中. 2.数组 ...

  8. .Net NPOI 上传excel文件、提交后台获取excel里的数据

    1.导入NPOI.dll 2.添加类NPOIExcel.cs using System; using System.Collections.Generic; using System.Text; us ...

  9. EChart中使用地图方式总结(转载)

    EChart中使用地图方式总结 2018年02月06日 22:18:57 来源:https://blog.csdn.net/shaxiaozilove/article/details/79274772 ...

  10. 【Java每日一题】20170310

    20170309问题解析请点击今日问题下方的“[Java每日一题]20170310”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...