カーソル処理
カーソルの宣言は、単純にCURSOR句とカーソル名の順番を入れ替えればOKです。
Oracleのカーソル宣言(DECLAREブロック中で)
CURSOR C1 IS SELECT ... ;
PostgreSQLのカーソル宣言(DECLAREブロック中で)
C1 CURSOR IS SELECT ... ; ![]()
カーソル属性
Oracleには、次のカーソル属性があります。
- %FOUND
- %ISOPEN
- %NOTFOUND
- %ROWCOUNT
PostgreSQLには、%FOUND属性に相当するFOUND変数がありま す。%NOTFOUND属性は、FOUND変数の否定、つまりNOT FOUNDとして擬似的にサポートされます。%ISOPENおよび%ROWCOUNTについては、サポートされていませんが、等価な変数を用意すれば擬似 的に対応は可能です。
また、PostgreSQLのFOUND変数は、すべてのカーソルで共通な特殊変数として実装されています。どの時点でもNULLや例外にはならず、表6にあるようなOracleのFOUND属性の振る舞いと異なりますので注意が必要です。

表6:Oracleにおけるカーソル属性の振る舞い
(画像をクリックすると別ウィンドウに拡大表示します)
(画像をクリックすると別ウィンドウに拡大表示します)
また、PostgreSQLのFOUND変数は、どのカーソルかに関係なく、常に直前のフェッチに対する結果を示します。そのため、複数のカーソルを同時に開いているときは、FOUND変数がどのカーソルのフェッチ結果を示しているのかに注意する必要があります。