IF-THEN-ELSEIF-ELSEELSEIFはELSIFの別名です。単純なループLOOP、EXIT、WHILE、FOR文を使用して、PL/pgSQL関数で、コマンド群を繰り返すことができます。LOOP;LOOPは、EXIT文またはRETURN文によって終了されるまで無限に繰り返される、条件無しのループを定義します。ラベルオプションは、入れ子状ループ内のEXIT文で、どのレベルの入れ子が終了するかを指定するために使用されます。LOOPの次の文がその後に実行されます。指定された場合、それは現在のループ、もしくは、入れ子になったループやブロックの外側のレベルのラベルである必要があります。その後、指名されたループまたはブロックを終らせ、そのループまたはブロックの対応するENDの次の文に制御を移します。WHENがある場合、指定された条件が真の場合のみループの終了が起こります。なければ、EXITの後の行に制御が移ります。条件無しのループに限らず、あらゆるループからの即時の脱出のために使用できます。LOOP;WHILE文は条件式の評価が真である間、文の並びを繰り返します。条件は、ループ本体に入る前にのみチェックされます。ここで演算をいくつか行います。ここで演算をいくつか行います。LOOP;この形式のFORは整数値の範囲を繰り返すループを生成します。name変数はinteger型として自動的に定義され、ループ内部のみで存在します。範囲の下限、上限として与えられる2つの式はループに入った時に一度だけ評価されます。繰返し刻みは通常1ですが、REVERSEが指定された場合は-1となります。整数FORループの例を以下に示します。ここで演算をいくつか行います。ここで演算をいくつか行います。LOOP;下限が上限よりも大きい(REVERSEの場合はより小さい)場合、ループ本体は全く実行されません。エラーは発生しません。問い合わせ結果による繰返し別の種類のFORループを使用して、問い合わせの結果を繰返し、そのデータを扱うことができます。以下に構文を示します。LOOP;レコードまたは行変数には、正常にquery(SELECTコマンド)の結果の全ての行が代入され、各行に対してループ本体が実行されます。plpgsql;このループがEXIT文で終了した場合、最後に割り当てられた行の値はループを抜けた後でもアクセスすることができます。文は行を繰り返すもう一つの方法です。LOOP;これは、元とするSELECT文が文字列式で指定される点を除き、前の形式と似ています。この式はFORループの各エントリで評価され、再計画が行われます。これにより、プログラマは、通常のEXECUTE文と同じように事前に計画された問い合わせによる高速性と、動的な問い合わせの持つ柔軟性を選択することができます。ループを、次のような方法で区別しています。記号が存在するか否かというものです。ループであると仮定します。いうエラーメッセージが出ることがよくあり、予想される単純な構文エラーとは異なったものとなります。関数の内部で発生したエラーは関数の実行を中止し、実際に周辺のトランザクションをアボートします。句を使用すれば、エラーを捕捉してその状態から回復できます。ブロックの構文を拡張したものです。次の文に制御が移ります。示した一覧に制御が移ります。次の文に制御が移ります。句が存在しないのと同じで、エラーは外側に波及します。含んだ外側のブロックはエラーを捕捉できますが、失敗すると関数の処理は中断されます。全ての状態名は付録Aに示すことができます。分類名はそこに分類される全てのエラーに合致します。以外の全てのエラーに合致します。名前で捕捉することは可能ですが、賢明ではありません。状態名は、大文字と小文字を区別しません。句はそのエラーを捕捉できずエラーは外側に波及します。句は、そのエラーを捕捉できます。関数のローカル変数はエラーが起こった後の状態を保ちます。ブロック内部における永続的なデータベースの状態は、ロールバックされます。そのような例を以下に示します。句がそのエラーを捕捉します。コマンドによる結果はロールバックされます。コマンドはロールバックされません。句を含んだブロックの実行に要する時間は、含まないブロックに比べてとても長くなります。使用してはいけません。