出于习惯,我一直在我的应用程序代码中使用try / catch块来处理所有SQL查询,并在catch块的开头进行回滚。我也一直在承诺那些成功的。这对SELECT
是必要的吗?它是否释放了数据库方面的东西? select语句不会改变任何数据,因此看起来有点无意义,但也许有一些我不知道的原因。
e.g。
try {
$results = oci_execute($statement)
oci_commit($connection);
return $results;
}
catch {
oci_rollback($connection)
throw new SqlException("failed");
}
答案 0 :(得分:7)
SELECT
中的 Oracle
语句(除非它们是SELECT FOR UPDATE
)从不锁定任何记录,也不会隐式打开事务。
除非您在交易中发出任何DML
操作,否则无论您是提交还是回滚交易都无关紧要。