如何在不运行实际查询的情况下检查JDBC语句的SQL语法?

bra*_*ter 14 sql oracle syntax verification jdbc

我有一个SQL语句(对于Oracle数据库)如果有效则需要很长时间才能运行.如果它无效,则立即返回错误.

我想检查语法是否有效而不运行语句(通过JDBC),例如在'check statement'按钮后面.是否有独立于供应商的方式?我首先想到的只是将查询定义为PreparedStatement似乎不会导致任何类型的编译或错误检查.

Ran*_*ndy 11

可能会为声明发布解释计划会给你有用的结果.

另一个想法 - 但可能更难的是编辑要添加的查询(和rownum <1)或其他东西以使其快速运行

  • 解释计划是要走的路.它将提供与"运行"查询相同的语法错误 (2认同)
  • 如何处理绑定参数? (2认同)

ype*_*eᵀᴹ 5

这更像是一个hack而不是一个真正的答案,但你可以运行一个总是返回一行和一列的查询:

SELECT ( EXISTS (SELECT 1 FROM dual)
         OR
         EXISTS (your Query here)
       ) AS result
FROM dual 
Run Code Online (Sandbox Code Playgroud)

TRUE如果您的查询有效,则应该返回,如果无效则引发错误.

  • +或者`select*from(你在这里查询),其中1 = 0` (3认同)

Gri*_*Dog 5

如果您正在处理SELECT查询,那么JDBC PreparedStatement#getMetaData可能会起作用吗?