sql print输出格式_SQL工具集格式化结果的SQL

本文介绍了Tom的print_table存储过程,用于格式化SQL查询结果,提供更好的可读性。通过对比未格式化的输出,展示了print_table的优势。文章详细解释了存储过程的内部逻辑,包括参数设置、字段定义和输出限制。此外,还强调了学习经典脚本背后的逻辑和设计思想的重要性,并提供了获取脚本的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

今天我们“SQL工具集”介绍的是一个存储过程,他的作者是大名鼎鼎的Tom,Oracle界最著名的一个网站AskTom,就是这个Tom,虽然现在Tom大叔已经退休了,但是网站还在被其他人运营,延续着Oracle学习者的热情。这个存储过程的名称是print_table,用于格式化打印SQL结果,为了做下对比,我们看下常规检索v$database视图的效果,

b097fae55fe69444e5e8948faa81ade6.png

若不使用col格式化一些字段,输出是乱的,没有可读性。看下使用这个存储过程的效果,d9bd3ef8feea7cc64d4c04f52c76e463.png

非常整齐,不用图形化工具,就可以使用sqlplus读了。Tom在这篇帖子发布了这个存储过程,
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1035431863958

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

39337556e8e695bbc5d8a4b181e07211.png

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

若输入参数p_date_fmt不为空,则需要存储系统默认的nls_date_format,用于restore,cb642978100123ad6a5abf7b923f3af7.png

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

解析和描述SQL语句原文,逐字段来定义,其中113是BLOB类型,此处不适用,按照4000字节定义,e7ef6ba5089e44eeb26ec6d21f97bf49.png

逐字段来打印每一列,因为dbms_output仅打印255个字符/行,因此此处列显示200个字符截取了,同时列名右补空格满足30位,3deb47d402172fe848172804009196cb.png

执行完成/出现异常时则调用了restore。

Tom则形容这工具是最cool的打印语句脚本,05c4dbf1f6fbe0cbd4f51414ca5d0e99.png

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

1381ed8bc7a7e671e0eb46139548aa21.png

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

从这个存储过程,我们学到两点,

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

print_table.sql文本可从我的github进行下载,

https://github.com/bisal-liu/oracle/blob/master/print_table.sql

近期的热文:

《SQL工具集-查询会话等待》

《数据库到底能不能部署在docker容器中?》

《一道SQL问题,你来试试的?》

《如何捕获问题SQL解决过度CPU消耗的问题》

《如何查看JVM运行的堆内存情况》

《Linux下如何快速删除大量碎小的文件?》

《打造国产技术产品的必要性》

《Oracle删除字段的方式和风险,你都了解么?》

《登录缓慢的诡异问题》

《PLSQL Developer几个可能的隐患》

《从70万字SRE神作提炼出的7千字精华文章》

《从数据误删到全量恢复的惊险记录》

《公众号600篇文章分类和索引》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值