一直以来,觉得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. mysql 开发进阶篇系列 17 MySQL Server(key_buffer与table_cache)

    一.key_buffer 上一篇了解key_buffer设置,key_buffer_size指定了索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度.通过检查状态值Key_read_reque ...

  2. Spring Boot SOAP Webservice例子

    前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...

  3. 前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.   在 前端浏览器 和 后端服务器 之间通常会使用 JSON格式的数据 来进行数据交互,而JSON格式的 ...

  4. Cookie提要

    Cookie的基本概念和设置  Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制.从实现上说,Cookie是存储在客户端上的小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Coo ...

  5. JavaSSM框架整合

    SSM整合 ssm框架 框架整合  在博客的前面介绍了mybatis,spring,springmvc的使用,那么这篇博客将介绍将mybatis和spring,springmvc的整合. 整合之前,我 ...

  6. [转]WEB页获取串口数据

    本文转自:https://www.cnblogs.com/rockyhm/p/3434200.html 最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多  大 ...

  7. 在Azure虚拟机上部署FileZilla FTP服务器

    1.开始之前准备的软件 ①一台Azure虚拟机 ②FileZilla服务端安装包 我这边是windows的所以 给个链接 https://filezilla-project.org/download. ...

  8. Spring Boot 设置静态资源访问

    问题描述 当使用spring Boot来架设服务系统时,有时候也需要用到前端页面,当然就不可或缺地需要访问其他一些静态资源,比如图片.css.js等文件.那么如何设置Spring Boot网站可以访问 ...

  9. 从零开始学安全(十一)●IP地址

    127 都是本机地址 ip  DE 类网段 都是广播网段 它并不指向特定的网络 用不上

  10. 25.QT-模型视图

    模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离 模型只需要对外提供标准接口存取数据,无需数据如何显示 视图只需要自定义数据的显示方式,无需数据如何组织存储 当数据发生改变时,会通过信号 ...