Sql Splitter 介绍
在进行项目自动化部署时,需要自动的执行数据库的初始化脚本,包含结构脚本和初始化数据。
由于历史原因没有使用jpa
内部有使用oracle和使用postgres的项目,postgres通过在执行脚本时自动添加自定义分割符,在用ibatis的ScriptRunner即可完成自动执行,而oracle首先如果select之类的语句末尾有分号则jdbc执行会直接报错。数据库结构语句和数据语句混在一起的话,ScriptRunner就不太好区分了,又不想在容器里面装一个pl/sql客户端用于跑脚本,所以最终就单独写一个解析方法,分割sql脚本。
该方法将一整个Sql脚本分割为由一条条sql语句组成的sql列表,用于给jdbc执行。
datagrip 能直接成功的脚本那么该Splitter分割出来的sql就能按照顺序执行。
如果有分割识别出错的项,希望能提到issue,尽可能将该解析方法做到全面。
欢迎交流以完善该方法
代码github 地址
注意事项
- 现在只有oracle实现,
- 不支持oracle 的
Q'/test/'
语法 - 最后一行必须有结尾符,比如select语句最后必须有分号不能省略
使用
InputSteam inputSteam = "获取Stream方法"
List<String> sqlList = new OracleSqlSplit(inputStream).getSqlList();