【发布时间】:2009-12-07 15:43:45
【问题描述】:
作为发布的一部分,我们针对数据库运行大量 PL/SQL 脚本。最近有人将; 留在了一个脚本的行尾,该脚本被称为另一个脚本,因此这意味着该脚本没有运行。因为这并没有导致错误,只是没有运行,所以花了相当长的时间来追踪发生了什么。
我想在运行脚本之前检查脚本中是否缺少末尾的 ; 或后面的行中的 /。这变得更加复杂,因为脚本中的“行”实际上可能跨越多行,如果它是语句或代码块。
对我来说,这似乎是这样做的,我将不得不解析脚本,然后检查它们是否符合上述要求。
我找到了 ANTLR 并想知道这是否是一种方法,因为似乎有 existing PL/SQL grammars 但看起来这将是一个简单的检查的逐步学习曲线。
有没有人知道一种简单的方法或任何其他工具、eclipse 插件等,我可以使用它们来检查脚本中缺少最后一行 ; 或后面一行 / 的行?
更新 我们已经完成了大部分工作Tom H suggested。脚本在我们的测试服务器中运行,我们有一个在最后更新的版本表。问题是容器脚本中缺少分号意味着一个脚本没有运行,但其余的包括更新版本号的脚本运行时没有错误。因此,这个问题只是在测试中得到了很大的帮助。这需要在运行添加了缺少的分号的脚本之前恢复数据库,因此基本上导致半天的测试时间丢失。如果有一种简单的方法可以在在将脚本运行到测试服务器之前检查这一点,它可以节省相当多的时间。
【问题讨论】:
-
在我使用的数据库版本控制系统中,在更新脚本开始时,我设置版本号并为其分配“运行”标志,然后在 脚本结束。