当前位置: 首页 > news >正文

通过java来格式化sql语句(r4笔记第61天)

经常在抓取一些sql语句的时候,得到的sql文本有格式的问题,如果尝试得到执行计划,每次都会费一番周折。比如下面的sql语句,基本包含了常见的格式问题。第3行,第4行出现了断行,执行的时候就会报错。select /*+ leading(s) index(s TABLE_BPM_STEP_INST_5IX) use_nl(s pp step) */ s.ALLOW_CREATE, s.ASSIGNEE, s.ASYNC_RETURNED_PARAMS, s.ATTACHER2STEP_INST, s.COMMITTER, s.CONTROL_COUNT, s.CURR_FAULT2FAULT_INFO, s.DO_AVAIL_ON_RESUM, s.DO_FIN_ON_RESUM, s.HAS_DEPENDENTS, s.HAS_MARCH_REND, s.HAS_REND, s.INFLOW_BITS, s.ITER_COUNT, s.NUM_OR_PREREQS, s.NUM_PENDING, s.NUM_PENDING_PREREQS, s.OBJID, s.OUTFLOW_BITS, s.PARAMS, s.PARENT2PROC_INST, s.ROOT2PROC_INST, s.START_TIME, s.STATUS, s.STATUS_CHANGE_TIME, s.STEP2STEP, s.TARGETED_BY_ALARMS, s.TRIGGERS_ALARMS, s.WAIT_TIME, s.WORKER FROM TABLE_BPM_PROC_INST p, TABLE_BPM_STEP_INST s, TABLE_BPM_STEP step WHERE s.root2proc_inst = p.objid AND s.step2step = step.objid AND ( NOT (step.step_type = 4)) AND p.root_status in (0, 14) AND s.committer = :1 AND s.assignee in ('BpmInServer', 'BpmInServerSmThr', 'BpmJms') AND s.status in (50, 55) AND s.curr_fault2fault_info is null and ( p.EXEC_DOMAIN like :2 ) 今天下定决心使用java来格式化了一把sql文本。格式化后的文本如下,得到的效果还是不错的。select /*+ leading(s) index(s TABLE_BPM_STEP_INST_5IX) use_nl(spp step) */ s.ALLOW_CREATE, s.ASSIGNEE, s.ASYNC_RETURNED_PARAMS,s.ATTACHER2STEP_INST, s.COMMITTER, s.CONTROL_COUNT,s.CURR_FAULT2FAULT_INFO, s.DO_AVAIL_ON_RESUM, s.DO_FIN_ON_RESUM,s.HAS_DEPENDENTS, s.HAS_MARCH_REND, s.HAS_REND, s.INFLOW_BITS, s.ITER_COUNT,s.NUM_OR_PREREQS, s.NUM_PENDING, s.NUM_PENDING_PREREQS, s.OBJID,s.OUTFLOW_BITS, s.PARAMS, s.PARENT2PROC_INST, s.ROOT2PROC_INST,s.START_TIME, s.STATUS, s.STATUS_CHANGE_TIME, s.STEP2STEP,s.TARGETED_BY_ALARMS, s.TRIGGERS_ALARMS, s.WAIT_TIME, s.WORKER FROMTABLE_BPM_PROC_INST p, TABLE_BPM_STEP_INST s, TABLE_BPM_STEP stepWHERE s.root2proc_inst = p.objid AND s.step2step = step.objid AND (NOT (step.step_type = 4)) AND p.root_status in (0, 14) ANDs.committer = :1 AND s.assignee in ('BpmInServer', 'BpmInServerSmThr','BpmJms') AND s.status in (50, 55) AND s.curr_fault2fault_info isnull and ( p.EXEC_DOMAIN like :2 )

对应的java代码结构如下,适当做了重构,可以在稍后把java代码封装一下。

点击(此处)折叠或打开

  1. public class FormatSql {

  2. public static void main(String[] args) throws IOException {

  3. ArrayList<String> strArr = readFromFile(); //从指定的文件中读取文件内容

  4. formatSQL(strArr); //格式化sql文件

  5. OutputFormatSql(strArr); //输出格式化后的sql语句

  6. }

完整的代码如下:

相关文章:

  • 一条执行时间两天半的sql语句简化(r4笔记第62天)
  • 通过pl/sql来格式化sql(r4笔记第63天)
  • java中的序列化 (r4笔记第64天)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • 通过shell脚本快速定位active session问题(r4笔记第65天)
  • 重温二分查找算法(r4笔记第66天)
  • 不要成为技术的奴隶(一) (r4笔记第67天)
  • 最简单的web服务器实现(一)(r4笔记第68天)
  • 通过编程控制CPU利用率(r4笔记第69天)
  • 通过图表简化sql语句的表关联(r4笔记第70天)
  • 巧用外部表避免大量的insert (r4笔记第71天)
  • 海量数据迁移之数据抽取流程 (r4笔记第72天)
  • 重温快速排序(r4笔记第73天)
  • 海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)
  • mongoDB初探第一篇(r4笔记第75天)
  • AngularJS指令开发(1)——参数详解
  • css属性的继承、初识值、计算值、当前值、应用值
  • echarts的各种常用效果展示
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vim Clutch | 面向脚踏板编程……
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Windows Containers 大冒险: 容器网络
  • 笨办法学C 练习34:动态数组
  • 闭包--闭包作用之保存(一)
  • 近期前端发展计划
  • 前端_面试
  • 前端之React实战:创建跨平台的项目架构
  • 使用SAX解析XML
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用element的upload组件实现多图片上传和压缩
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Java总结 - String - 这篇请使劲喷我
  • ​Python 3 新特性:类型注解
  • ​TypeScript都不会用,也敢说会前端?
  • #13 yum、编译安装与sed命令的使用
  • #pragma data_seg 共享数据区(转)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (31)对象的克隆
  • (c语言)strcpy函数用法
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pojstep1.3.1)1017(构造法模拟)
  • (二十三)Flask之高频面试点
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三)docker:Dockerfile构建容器运行jar包
  • (新)网络工程师考点串讲与真题详解
  • (转)菜鸟学数据库(三)——存储过程
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .Mobi域名介绍
  • .Net 4.0并行库实用性演练
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core 中插件式开发实现
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Framework杂记