是否有任何方法來檢查Oracle的SQL查詢是否可以成功運行(通過成功我的意思是查詢在語法上是正確的,所有表/列名都存在,用戶具有適當的權限,等等)而不實際運行它?該查詢可能不是SELECT,但我不希望更改實際發生,如果它會修改任何數據。驗證Oracle非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);
}
但是如果$查詢有一定的DDL中,我瞭解到,甲骨文將立即提交。那麼是否有任何方法可以在不做任何修改的情況下檢查查詢?
oci_parse過程中會發生什麼? – 2011-04-13 20:56:49
@Shannon - 來自oci_parse手冊頁:「該函數不驗證sql_text。找出sql_text是否是有效的SQL或PL/SQL語句的唯一方法就是執行它。」看到http://php.net/manual/en/function.oci-parse.php – DCookie 2011-04-13 21:44:19
我打算建議研究dbms_sql包的解析過程,直到我閱讀文檔「所有語句都立即被解析爲 」。另外,DDL語句在解析時立即運行。「所以沒關係。 – 2011-04-13 22:12:41