Podmíněné provádění příkazů
Příkaz IF
Tento příkaz umožňi podmíněné provedení SQL/PSM příkazů (v případě platnosti zadané podmínky - je rovna hodnotě true). K příkazu IF můžeme přidat libovolné množství klauzulí ELSEIF. Na ně přijde řada v případě, že podmínka v IF není splněna. Příkaz může obsahovat jednu klauzuli ELSE, která zajistí provedení relevantních SQL/PSM příkazů pokud ani jedna z testovaných podmínek není pravdivá.
Syntaxe
IF logicky vyraz THEN seznam sql/psm prikazu [ELSEIF logicky vyraz THEN seznam sql/psm prikazu [ELSEIF ...]] [ELSE seznam sql/psm prikazu] END IF
Příkaz CASE
Tento příkaz nám umožňuje snadný zápis řady podmínek, kdy v případě splnění některé z nich, se provede řada SQL/PSM příkazů odpovídající první platné podmínce. U tohoto příkazu je třeba si dávat pozor na záměnu s SQL výrazem CASE. Jak SQL/PSM příkaz CASE, tak SQL výraz CASE existují ve dvou variantách (v jednoduché a prohledavací). Je však mezi nimi několik zásadních rozdílů:
- za klíčovým slovem then následuje seznam SQL/PSM příkazů,
- příkaz CASE je ukončen (naprosto v tradici SQL/PSM dvojicí klíčových slov END CASE,
- v případě, že by žádná podmínka nebyla splněna provádí se varianta ELSE. Pokud tato klauzule chybí, vyvolá se výjimka '20000'.
V jednoduché variantě je za klíčovým slovem CASE výraz. Provedou se ty SQL/PSM příkazy, kde se výsledek tohoto výrazu nalezne v klauzuli WHEN. V prohledávací variantě klauzule WHEN obsahuje logický výraz. Provede se ta část (SQL/PSM příkazy za THEN), kde výraz v klauzuli WHEN bude pravdivý. PL/pgPSM umožňuje zápis seznamu hodnot oddělených čárkou do klauzule WHEN v jednoduchém CASE příkazu (tzv. Comma-separated predicates in simple CASE statement).
Syntaxe
-- jednoduchy prikaz CASE CASE vyraz WHEN seznam hodnot oddelenych carkou THEN seznam SQL/PSM prikazu [ WHEN seznam... THEN seznam... [...]] END CASE -- prohledavaci varianta prikazu CASE CASE WHEN logicky vyraz THEN seznam SQL/PSM prikazu [ WHEN logicky vyraz THEN seznam... [...]] END CASE
Příkaz CASE by se měl použít všude tam, kde použití příkazu IF vede k nepřehlednému zápisu.