2007.09.13

ORACLEのカーソル属性

<カーソル属性>
カーソルとは複数行取得できるSQLを発行した時に1行ずつ取得結果を取り出して処理したい場合に使用するものです。
カーソルの使用方法には2通りあり、明示的にカーソルをOPENしてFETCHして、CLOSEするような使い方と、
宣言部でカーソルを宣言して、カーソルFORループで回す方法があります。
カーソルの状態を取得したい時は前者では明示カーソル属性を、
後者では暗示カーソル属性を使用すればカーソルの状態を取得できます。

・明示カーソル属性
カーソル%FOUND  :1件以上のデータが見つかったらTRUE
カーソル%NOTFOUND:1件もデータが見つからなかったらTRUE
カーソル%ROWCOUNT:現在までの処理件数を返す
カーソル%ISOPEN :カーソルがOPENしていたらTRUE


・暗示カーソル属性
SQL%FOUND  :DML文が1回でも実行されればTRUE
SQL%NOTFOUND:DML文の処理対象がない場合はTRUE
SQL%ROWCOUNT:処理対象行数
SQL%ISOPEN :常にFALSE

カーソルをOPENしたときに、注意しなくてはならないことは、
カーソルがOPENしていた場合のみ、CLOSEするということです。
OPENしていないのに、CLOSEするとエラーで落ちてしまいます。
「カーソル%ISOPEN」でステータスを取って、OPENしていたらCLOSEするという処理が必要になってきます。

少し面倒くさいのが、カーソルをOPENした分だけ、上記のような処理が必要になってくることです。
また、正常終了時と、エラー時両方に上記の処理が必要になってくるので注意が必要です。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
jnakamura