FOUNDは、各PL / pgSQL関数呼び出し内でfalseから始まります。次の各タイプのステートメントによって設定されます。
SELECT INTOステートメントは、行が割り当てられている場合はFOUNDをtrueに設定し、行が返されない場合はfalseを設定します。
PERFORMステートメントは、1つ以上の行を生成(および破棄)する場合はFOUNDをtrueに設定し、行が生成されない場合はfalseを設定します。
UPDATE、INSERT、およびDELETEステートメントは、少なくとも1つの行が影響を受ける場合はFOUNDをtrueに設定し、行が影響を受けない場合はfalseを設定します。
FETCHステートメントは、行を返す場合はFOUNDをtrueに設定し、行が返されない場合はfalseを設定します。
MOVEステートメントは、カーソルを正常に再配置する場合はFOUNDをtrueに設定し、そうでない場合はfalseを設定します。
FORまたはFOREACHステートメントは、1回以上反復する場合はFOUNDをtrueに設定し、そうでない場合はfalseに設定します。FOUNDは、ループの終了時にこのように設定されます。ループの実行中、FOUNDはループステートメントによって変更されませんが、ループ本体内の他のステートメントの実行によって変更される場合があります。
RETURN QUERYおよびRETURN QUERY EXECUTEステートメントは、クエリが少なくとも1行を返す場合はFOUNDを設定し、行が返されない場合はfalseを設定します。
他のPL / pgSQLステートメントは、FOUNDの状態を変更しません。特に、EXECUTEはGET DIAGNOSTICSの出力を変更しますが、FOUNDは変更しません。
FOUNDは、各PL / pgSQL関数内のローカル変数です。変更すると、現在の機能のみに影響します。
select into
データを返さない場合でも例外が発生しますよね?