经典的print_table学习

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 经典的print_table学习

最近上班路上读《Oracle性能优化与诊断案例精选》,发现eygle引用了一个非常方便的工具,原作者是大名鼎鼎的Tom,更加引起了我的关注。

我理解一些工具是方便了我们日常的工作需求,但同时由于其封装了一些细节,因此若只是知道用法,不知道实现原理,对于个人来说,浪费了一次锻炼的机会,因为往往这些经典的工具,蕴含着一些可以借鉴的逻辑,以及设计思想,所谓“触类旁通”,才能增加我们的战斗力。

这个工具是一个存储过程,print_table,用于格式化打印SQL结果,我们看下常规检索v$database视图的效果, 
经典的print_table学习
若不使用col格式化一些字段,输出是乱的,没有可读性。

看下使用这个存储过程, 
经典的print_table学习
非常整齐,不用图形化工具,就可以使用sqlplus读了。

这篇帖子中,Tom发布了这个存储过程, 

原版,存储过程接受两个参数,一个是SQL语句,一个是日期的格式化,默认值是’dd-mon-yyyy hh24:mi:ss’, 
经典的print_table学习

定义了一个内联的存储过程restore,用于脚本执行完成恢复配置,包括cursor_sharing参数、nls_date_format参数,以及关闭游标。 
经典的print_table学习

若输入参数p_date_fmt不为空,则需要存储系统默认的nls_date_format,用于restore, 
经典的print_table学习

为了让这个存储过程,执行的SQL语句能用上绑定变量,减小硬解析,设置cursor_sharing为FORCE, 
经典的print_table学习

解析和描述SQL语句原文,逐字段来定义,其中113是BLOB类型,此处不适用,按照4000字节定义, 
经典的print_table学习

逐字段来打印每一列,因为dbms_output仅打印255个字符/行,因此此处列显示200个字符截取了,同时列名右补空格满足30位, 
经典的print_table学习

执行完成/出现异常时则调用了restore, 
经典的print_table学习

Tom则形容这工具是最cool的打印语句脚本, 
经典的print_table学习

当然存储过程中任何地方,均可以自定义,例如对于判断字段属性BLOB,可以设置任何自己需要的格式,包括日期格式,例如书中使用的是删除日期格式化参数的版本, 
经典的print_table学习

执行存储过程有一个前提,设置serveroutput为on,Tom建议可以将此设置加入sqlplus的预处理中,编辑login.sql, 
经典的print_table学习

总结: 
(1) 经典的脚本,除了方便使用,往往包含了经典的逻辑、设计思想,有些可以借鉴,可以根据需求自定义,触类旁通,充分发挥这些脚本的价值。 
(2) 执行存储过程,需要设置serveroutput为on,才能显示输出。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

经典的print_table学习
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 经典的print_table学习


 上一篇
含LOB的表实际容量计算方法 含LOB的表实际容量计算方法
前两天有一个开发库,报了ORA-01654的错误,提示的是SYS_IL000…$$的对象不能分配表空间了,首先这种SYS_IL的对象名称是系统默认为LOB大对象LOBINDEX设置的名称,其次开发人员检索dba_segments视图看这个L
下一篇 
Tuxedo域连接错误引出的netstat不同平台参数的区别 Tuxedo域连接错误引出的netstat不同平台参数的区别
最近测试同事有一个需求,搭建一套Tuxedo域,连接网关,通过其和其他域交互,搭建过程中配置正确,但域连接报错,模拟过程如下,假设本地域名称为LOCALDOM,网关域名称为GWDOM,主机操作系统是Solaris。 从LOCALDOM本地域