有没有办法检查 Oracle 的 SQL 查询是否会成功运行(成功是指查询在语法上正确,所有表/列名都存在,用户具有适当的权限等)而不实际运行它?查询可能不是 SELECT,但如果它会修改任何数据,我不希望实际发生更改。
我想到了类似的东西:
$valid = false;
$stmt = oci_parse($db, $query);
if(!empty($stmt)) {
$res = oci_execute($stmt, OCI_DESCRIBE_ONLY|OCI_NO_AUTO_COMMIT);
if(!empty($res)) {
$name = oci_field_name($res, 1);
if(!empty($name)) {
$valid = true;
}
}
oci_rollback($db);
}
但是如果 $query 中有一些 DDL,我知道 Oracle 会立即提交它。那么有没有办法在不进行任何修改的情况下检查查询?