Deklaracja zmiennych
• DECLARE nazwa zmiennej typ danych
Obsługa sytuacji błędnych
• DECLARE nazwa wyjątku EXCEPTION
FOR SQLSTATE [VALUE] ciąg znaków
VALUE:
02000 Row not found
01000 Waring
• Wykonanie warunkowe
IF warunek THEN lista zdań
ELSEIF warunek THEN lista zdań
ELSE
Lista zdań
END IF
• CASE
CASE wyrażenie
WHEN wartość THEN lista zdań
• Powtórzenia
WHILE warunek LOOP
Lista zdań
END LOOP
Prosta procedura IN (1)
CREATE PROCEDURE firma (IN parametr
CHAR(1))
BEGIN
IF parametr = ‘n’ THEN
SELECT nazwa_firmy, miasto, ulica
FROM klienci
ELSE
SELECT nazwa_firmy, telefon
FROM klienci
END IF
END
Prosta procedura IN (2)
• CREATE PROCEDURE wpis_kwalifikacji
(IN id INTEGER,
IN nazwa CHAR(30),
IN opis VARCHAR(45)
IN kategoria INTEGER)
BEGIN
INSERT INTO dba.kwalfikacje (id_kwal,
nazwa, kwal_opis, id_kat)
VALUES (id, nazwa, opis, kategoria)
END
Prosta procedura OUT (1) –
pojedynczy parametr w wyniku
• CREATE PROCEDURE średnia_płaca
(OUT średnia DECIMAL (10,2))
BEGIN
-- CREATE VARIABLE średnia DECIMAL
(10,2)
zmienna przechowująca wartość
parametru OUT
SELECT AVG(pensja) INTO średnia FROM
PRACOWNIK
END
Prosta procedura OUT (2) –
wynikiem jest lista/zbiór
• CREATE PROCEDURE lista_plac (IN
nr_wydziału INTEGER)
RESULT (Identyfikator_prac INTEGER, pensja
DECIMAL (10,2))
BEGIN
SELECT id_pracownika, pensja FROM
pracownik
WHERE pracownik.id_wydziału = nr_wydziału
END
Kursor – przetwarzanie
wierszowe
• Deklaracja kursora z przyporządkowaniem
instrukcji SELECT
– DECLARE nazwa_kursora
CURSOR FOR zapytanie_SELECT
[FOR {READ ONLY|UPDATE}]
• Otwarcie kursora
– OPEN nazwa_kursora
• Pobieranie kolejnych wierszy w wyniku zapytania
i przypisywanie ich do zmiennych za pomocą
instrukcji FETCH
– FETCH nazwa_kursora INTO nazwa_zmiennej
• Zamknięcie kursora
– CLOSE nazwa_kursora
Przykład kursora (1)
BEGIN
DECLARE kurs_prac CURSOR FOR SELECT
nazwisko FROM Pracownik;
DECLARE nazwisko_prac CHAR(40);
OPEN kurs_prac
LOOP
FETCH NEXT kurs_prac INTO nazwisko_prac;
….
END LOOP
CLOSE kurs_prac
END
Funkcja
• CREATE FUNCTION dane_osob (imie
(CHAR(20)), nazwisko (CHAR(30)))
RETURNS (CHAR 51);
BEGIN
DECLARE dane_os CHAR(51);
SET dane_os = imie|| ‘ ‘ ||nazwisko;
RETURN dane_os;
END
TRIGGERY
• CREATE TRIGGER nazwa_triggera czas_zadziałania_zdarzenia [,
zdarzenie, …]
[ORDER integer] ON nazwa_tabeli
[REFERENCING [OLD AS stara_nazwa]
[NEW AS nowa_nazwa]]
[FOR EACH ROW {ROW|STATEMENT}]
[WHEN (warunek wyboru)]
[IF UPDATE (nazwa_kolumny)] …] ciąg zdań (zdanie złożone)]
[{AND|OR} UPDATE (nazwa_kolumny)] …] ciąg zdań (zdanie
złożone)]
ELSEIF UPDATE (nazwa_kolumny) THEN [{AND|OR} UPDATE
(nazwa_kolumny)] …] ciąg zdań (zdanie złożone)]
END IF]]
Czas zdarzenia – BEFORE, AFTER
Zdarzenia – DELETE|INSERT|UPDATE|UPDATE OF lista kolumn
REFERENCING – rozróżnienie dla starych i nowych nazw
FOR EACH
• FOR EACH ROW – działania
aktualizacji, wstawiania bądź
usuwania wykonywane na
pojedynczym wierszu
• FOR EACH STATEMENT – działanie
aktualizacji , wstawiania bądź
usuwania po wykonaniu całej
instrukcji