6

習慣から、アプリケーション コードですべての SQL クエリに対して try/catch ブロックを使用し、catch ブロックの先頭にロールバックを使用してきました。私はまた、成功したものをコミットしています。これはsに必要SELECTですか?データベース側で何かを解放しますか? selectステートメントはデータを変更していないので、やや無意味に思えますが、おそらく私が気付いていない何らかの理由があります.

例えば

try {
  $results = oci_execute($statement)
  oci_commit($connection);
  return $results;
}
catch {
  oci_rollback($connection)
  throw new SqlException("failed");
}
4

1 に答える 1

7

SELECT内のステートメントはOracle(そうでない限りSELECT FOR UPDATE) レコードをロックしたり、トランザクションを暗黙的に開いたりすることはありません。

トランザクション内で操作を発行しない限りDML、トランザクションをコミットするかロールバックするかは問題ではありません。

于 2010-03-04T15:15:28.470 に答える