作为发行版的一部分,我们针对数据库运行一些PL/SQL脚本。最近有人将;
从另一个脚本的另一个脚本的行尾离开,这意味着该脚本没有运行。因为这不会导致错误,它只是没有运行,追查发生的事情花了相当长的一段时间。检查sql脚本是否有效
我想在脚本运行之前检查脚本中是否存在行尾的;
或行后面的/
。这变得更加复杂,因为脚本中的“行”实际上可以跨越多行,如果它是语句或代码块的话。
对我来说,这似乎是要做到这一点,我将不得不解析脚本,然后检查他们满足上述。
我发现ANTLR并想知道这是否可以做到这一点,因为似乎有existing PL/SQL grammars但看起来这将是一个简单的检查步骤学习曲线。
有谁知道一个简单的方法或任何其他工具,Eclipse插件等等,我可以用它来检查脚本中的行被丢失或者在最后一个;
或之后就行了/
?
更新 我们已经做了大部分东西Tom H suggested。脚本运行到我们的测试服务器,并且我们有一个版本表,最后更新。问题在于容器脚本中缺少的分号意味着一个脚本没有运行,但其余的包括更新版本号的脚本没有错误地运行。因此,这个问题只能在测试中找到。这需要在运行添加了缺少分号的脚本之前恢复数据库,因此基本上导致半天的测试时间丢失。如果有一种简单的方法来检查之前将脚本运行到测试服务器,它可以节省相当多的时间。
在DB版本系统我用,在更新脚本的开始我设置了版本号和它分配一个“跑”标志,然后重置标志为“已完成”的脚本*年底*。 – 2009-12-08 14:50:15