SQL Plus是否可以验证SQL脚本是否可以运行



为了提高代码质量,我想验证SQL*plus是否可以在不执行SQL脚本的情况下执行SQL脚本,就像对SQL脚本的静态分析一样。你知道SQL*plus是否能做到这一点吗?或者你知道做同样事情的方法吗。

我知道从sql Dev(或其他软件(执行sql脚本与从sql*plus执行不同。

附言:我在Unix上使用SQL*plus。

谢谢大家。

是的,一种方法是"验证";一个不执行的sql查询就是使用

EXPLAIN PLAN FOR your-sql-statement;

有关更多信息,请参阅http://www.orafaq.com/wiki/Explain_Plan

否。验证脚本的唯一方法是运行它们。

以下是一些总体想法。

为了验证SQLPlus脚本中引用的脚本的路径,您需要使用bash脚本来解析脚本,例如,查找以下命令:

START s1.sql

@ s1.sql

@@ s1.sql

然后检查引用的脚本的路径。

SQLPlus理解绝对路径和相对路径,因此以下两者都有效:

@ ../s1.sql

@/tmp/s2.sql

此外,SQLPlus将默认扩展为.sql,因此,例如,如果您有一个名为s3.sql的脚本,则可以将其引用为:

@ s3.sql

@ s3

然后还有SQLPATH环境变量,它的工作方式与查找SQL脚本时的bashPATH变量类似。

最后,在SQLPlus中,您可以设置变量并将其作为文件名引用,例如

column  col_name  new_value  var_file_name
select col_name  as var_file_name 
from table
where x = y;
spool &&var_file_name

解决上述问题的唯一方法是运行查询。但是,如果这也依赖于其他变量,那么您将很快不得不为SQLPLus脚本编写一个完整的解析器。

您可以尝试在所有脚本中添加一个精心设计的开关,以发出跳过或运行的信号,但据我所知,没有GOTOSKIP类型的命令可以用来跳到脚本的末尾,作为检查是否存在的手段。

最新更新