direction句の省略は、NEXTの指定と同じです。SCROLLオプションを用いてカーソルを宣言または開かないと、directionの値による逆方向への移動の要求は失敗します。cursor名は、開いているカーソルのポータルを参照するrefcursor変数名でなければなりません。cursor;MOVEコマンドは、データを取り出さないでカーソルの位置を変更します。移動先の行を返さないでカーソルの位置だけを変更することを除けば、FETCHコマンドと同一の働きをします。INTOと同様に、特殊な変数FOUNDを用いて、移動先に行が存在するかどうかを検査できます。SQLコマンドで許されている以下の値のいずれかを取ることができます。direction句の省略は、NEXTの指定と同じです。SCROLLオプションを用いてカーソルを宣言または開かないと、directionの値による逆方向への移動の要求は失敗します。cursor;カーソルの位置をテーブルの行に変更すれば、カーソルによって特定した行を更新または消去できます。UPDATEを使用することが最善です。詳細についてはDECLAREマニュアルページを参照下さい。cursor;CLOSEはポータルの背後にあるカーソルを閉じます。これを使用してトランザクションの終わりよりも前にリソースを解放することができ、また、カーソル変数を解放し、再度開くことができます。カーソルを返すPL/pgSQL関数では、呼び出し元にカーソルを返すことができます。この方法は、関数から複数行または複数列を返す場合、特にその結果集合が非常に大きい場合に有用です。これを行うには、関数はカーソルを開き、呼び出し元にカーソル名を返します(もしくは、もし呼び出し元でポータル名がわかっていれば、単純に指定されたポータル名を使用してカーソルを開きます)。これにより、呼び出し元はカーソルから行を取り出すことができるようになります。カーソルは呼び出し元で閉じることができます。トランザクションが終了した際に自動的に閉じられます。カーソル用のポータル名は、プログラマが指定するか、または自動的に生成されます。ポータル名を指定するには、開く前に、単にrefcursor変数に文字列を代入します。refcursor変数の文字列値はOPENによって、背後のポータル名として使用されます。refcursor変数がNULLの場合、OPENは自動的に既存のポータルと競合しない名前を生成し、それをrefcursor変数に代入します。バウンドカーソル変数は、その名前を表現する文字列値で初期化されます。そのため、プログラマがカーソルを開く前に代入により上書きしない限り、ポータル名はカーソル変数と同じになります。アンバウンドカーソル変数の初期値はデフォルトでNULLです。そのため、上書きされていない場合に自動的に生成される一意な名前を受け取ります。以下の例は、呼び出し元でカーソル名を指定する方法を示しています。funccursor;COMMIT;以下の例では、自動的に生成されたカーソル名を使用しています。カーソルを使用するには、トランザクション内部である必要があります。1>";COMMIT;以下の例は単一関数から複数のカーソルを返す方法を示しています。カーソルを使用するには、トランザクション内部である必要があります。カーソル結果に対するループカーソルで返される行に対して反復することができるFOR文の亜種があります。構文は以下のようになります。];カーソル変数は宣言されたとき、何らかの問い合わせとバウンドされていなければならず、また既に開かれていてはなりません。FOR文は自動的にカーソルを開き、ループから抜けたときに再度閉じます。実際の引数値式のリストは、カーソルが引数を取ることを宣言された場合に限ってのみ出現できます。これらの値は、OPEN過程と同じ方法で、問い合わせの中で置換されます(項40.7.2.3を参照してください)。(存在するいかなる変数名の定義もループ内では無視されます)。カーソルによって返されたそれぞれの行はこのレコード変数に引き続いて割り当てられ、ループ本体が実行されます。