IF;ELSIFキーワードはELSEIFのように書くことができます。同じ作業を遂行する別の方法は、以下の例のようにIF-THEN-ELSE文を入れ子にすることです。IFの記述が必要です。従って、多くの選択肢がある場合ELSIFを使用するよりも厄介です。CASE;CASEの単純な形式はオペランドの等価性にもとづく条件的実行を提供します。search-expressionは(一度だけ)評価され、その後WHEN句内のそれぞれのexpressionと比較されます。CASEの次の文に制御が渡されます。(以降のくWHEN式は評価されません。statementsが実行されますが、ELSEが無いときはCASE_NOT_FOUND例外を引き起こします。CASE;CASEの検索された形式は論理値式の真の結果に基づく条件付き実行を提供します。それぞれのWHEN句のboolean-expressionはtrueとなる1つが見つかるまで順番に評価されます。CASEの次の文に制御が渡されます。(以降のWHEN式は評価されません。statementsが実行されますが、ELSEが存在しないときはCASE_NOT_FOUND例外を引き起こします。CASE;この形式のCASEは、判定基準が省略されたELSE句に達した場合に何もしないのではなくエラーなる点を除き、IF-THEN-ELSIFと全く同一です。単純なループLOOP、EXIT、CONTINUE、WHILE、FOR、FOREACH文を使用して、PL/pgSQL関数で、一連のコマンドを繰り返すことができます。];LOOPは、EXIT文またはRETURN文によって終了されるまで無限に繰り返される、条件なしのループを定義します。省略可能なlabelは、入れ子状になったループにおいてEXITおよびCONTINUE文がどのレベルの入れ子を参照するかを指定するために使用されます。LOOPの次の文がその後に実行されます。labelが指定された場合、それは現在またはその上位の入れ子になったループやブロックのラベルである必要があります。その後、指名されたループまたはブロックを終わらせ、そのループまたはブロックの対応するENDの次の文に制御を移します。WHENが指定された場合、boolean-expressionが真の場合のみループの終了が起こります。なければ、EXITの後の行に制御が移ります。EXITは、すべての種類のループと共に使用できます。条件なしのループでの使用に限定されません。BEGINブロックと共に使用した時、EXITによりブロックの次の文に制御が移ります。この目的のためにラベルが使用されなければならないことに注意してください。ラベル無しのEXITはBEGINブロックに対応するとは決して考えられません。(これは、ラベル無しのEXITがBEGINブロックに対応することを許容するPostgreSQLの8.4より前のリリースからの変更です。];labelが無い場合、すぐ外側のループの次の繰り返しが開始されます。ループ本体の残りの文は飛ばされて、他のループの繰り返しが必要かどうかを決めるため、制御がループ制御式(もし存在すれば)に戻ります。labelが存在する場合、実行を継続するループのラベルを指定します。WHENが指定された場合、boolean-expressionが真の場合のみループにおける次の繰り返しが始まります。なければ、CONTINUEの後の行に制御が移ります。CONTINUEは全ての種類のループで使用可能です。条件なしのループに限定されません。];WHILE文はboolean-expressionの評価が真である間、一連の文を繰り返します。条件式は、ループ本体に入る前にのみ検査されます。ここで演算をいくつか行います。ここで演算をいくつか行います。];この形式のFORは整数値の範囲内で繰り返すループを生成します。(ループ外部で定義しても、ループ内部では全て無視されます)。範囲の下限、上限として与えられる2つの式はループに入った時に一度だけ評価されます。BY句を指定しない時の繰り返し刻みは1ですが、BY句を用いて指定でき、ループに入った時に一度だけ評価されます。REVERSEが指定された場合、繰り返し刻みの値は加算されるのではなく、繰り返しごとに減算されます。整数FORループの例を以下に示します。