Podmíněné provádění příkazů

Z PostgreSQL
Přejít na: navigace, hledání

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.