我有sql文件包含sqlplus特定脚本:它包含/或;作为语句终止符,EXEC执行存储过程等。
我需要从java(jdbc)执行这个脚本,而不需要sqlplus。
sql ant task / maven sql插件无法处理不同的终结符或EXEC命令。
如果不运行sqlplus,你知道有什么好办法吗?
答案 0 :(得分:2)
我们遇到了同样的问题...简而言之,没有现成的解决方案:如果您打开Ant或Maven来源,您会发现他们使用的是简单的基于regexp的脚本分割器,适用于简单的脚本,但通常会失败,例如存储过程。
确实存在用于PL / SQL的ANTLR解析器,例如Alexandre Porcelli's one - 这些解析器非常接近,但仍未准备好用作插入式解决方案。
我们最终写了yet another ad hoc splitter,它知道一些sqlplus命令,如/
和EXIT
- 它仍然很难看,但适用于我们的大多数脚本。
答案 1 :(得分:1)
我可以想到两个选择。一个你不想要的 - 将Runtime.exec()改为sqlplus。另一种是读取文件,删除行斜线末尾并在分号时发送到JDBC。或者在发生这种情况时添加到批处理以减少到数据库的访问。