web-dev-qa-db-ja.com

PL / SQLでは、明示カーソルによってフェッチされたデータは不変ですか?

これは明らかな質問のようですが、グーグルはこれまでのところ私を失敗させました...

適用する必要のある更新を示すビューがあり、この目的のために、ビューをカーソルとして開き、各行を反復処理して適切な変更を行うSP)があるとします。重要なのは、SPによって行われた更新により、ビューの内容が変更されることです(たとえば、不整合が処理されると、行はビューから消えます)。

これは(SP内の)開いているカーソルに反映されますか、それとも最初に開いたときにフェッチするデータは固定されていますか?

私が読んだことは、カーソルデータis一度開かれると不変であることを示唆しています-これは良いことです-しかし、私はまだ正解を見つけていません。

1
Xophmeister

オラクルは、データの読み取り整合性のあるビューを提供します。読み取りコミットのデフォルトのトランザクション分離レベルを使用していると仮定すると、クエリが返すデータは、カーソルが開かれた時点で固定されます(カーソルが暗黙的か明示的かは関係ありません)。

唯一の例外は、クエリによって呼び出されるPL/SQL(つまり、ストアド関数)は、カーソルが開かれた時点ではなく、関数が呼び出された時点で存在するデータを参照することです。

3
Justin Cave