PL/SQL v příkladech / Anonymní blok a větvení
Stručný seriál, který krok po kroku představí konstrukce jazyka PL/SQL společnosti Oracle na jednoduchých příkladech. Předpokládá znalost základních principů procedurálního programování.

Anonymní blok

Program v jazyce PL/SQL se skládá z anonymních a pojmenovaných bloků. Anonymní slouží převážně k oddělení logických částí programu a pro řízení zpracování výjimek.

DECLARE
  -- nepovinná oblast pro deklaraci proměnných
  -- jednořádkový komentář
  /* víceřádkový komentář */
BEGIN
  -- povinná výkonová sekce
EXCEPTION
  -- nepovinná oblast pro zpracování výjimek
END;

Následující příklad demonstruje jednoduché zadeklarování číselné proměnné, přirazení hodnoty, operaci dělení a odchycení obecné výjimky s výpisem na konzoli. Za povšimnutí stojí především deklarace, kde datový typ stojí až za názvem proměnné a přiřazení hodnoty pomocí :=.

DECLARE
  a NUMBER;
BEGIN
  a:=10;
  a:=a/0; -- nelze použít zápis a/=0;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line('Dělení nulou!');
END;

Jednotlivé bloky do sebe lze zanořovat. Proměnné se stejným názvem mají platnost jen ve svém bloku.

DECLARE
  a NUMBER:=1; -- zápis výchozí hodnoty rovnou v deklarativní části
BEGIN
  DECLARE
    a NUMBER:=2;
    b NUMBER:=3;
  BEGIN
    dbms_output.put_line(a); -- 2
    dbms_output.put_line(b); -- 3
  END;
  dbms_output.put_line(a); -- 1
  -- proměnná b v tomto bloku neexistuje
END;

Větvení

Řízení toku programu je v PL/SQL realizováno pomocí standardní konstrukce IF THEN ELSE. Jako operátor porovnání se používá =.

DECLARE
  a BOOLEAN:=FALSE; -- logický datový typ
BEGIN
  IF (a=TRUE) THEN  -- možno zapsat jako IF (a)
    dbms_output.put_line('true');
  ELSIF (a=FALSE) THEN -- možno zapsat jako ELSIF (NOT a)
    dbms_output.put_line('false');
  ELSE
    dbms_output.put_line('null'); -- pozor, BOOLEAN může být NULL
  END IF;
END;

Možné je samozřejmě také použití příkazu CASE.

DECLARE
  a BOOLEAN;
BEGIN
  CASE a
    WHEN TRUE THEN
      dbms_output.put_line('true');
    WHEN FALSE THEN
      dbms_output.put_line('false');
    ELSE -- není splněna ani jedna podmínka
      dbms_output.put_line('null');
  END CASE;
END;


ZANECHTE KOMENTÁŘ


Velké díky pro teslathemes