background image

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

background image

• 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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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


Document Outline