PL/SQL
Blok PL/SQL:
DECLARE
deklaracje
BEGIN
instrukcje
EXCEPTION
obsługa wyjątków
END;
Deklaracje zmiennych:
Identyfikator TYP [NOT NULL] [:=wyrażenie];
np.: nazwisko VARCHAR2(30) := ‘Kowalski’;
SELECT w PL/SQL:
SELECT wyrażenie1, wyrażenie2, ...
INTO zmienna1, zmienna2, ...
FROM ...
Zapytanie musi zwracać 1 wiersz.
Warunki:
IF warunek THEN
instrukcje
ELSIF warunek THEN
instrukcje
ELSE
instrukcje
END IF;
Włączenie wyświetlania komunikatów:
SET ServerOutput ON
Wyświetlenie komunikatu:
DBMS_OUTPUT.PUT_LINE(napis);
Wywołanie błędu:
Np. raise_application_error(-20500, ‘komunikat’);
Zmienne systemowe:
SQL%ROWCOUNT - ilość zwróconych wierszy
SQL%FOUND - czy zapytanie zwróciło wiersz
SQLERRM - komunikat o błędzie
Uruchomienie procedury:
EXECUTE procedura (parametry)
Zmienne typu wiersza i kolumny:
zmienna emp.ename%type - zmienna tego samego typu co ename
zmienna emp%rowtype - zmienna typu wierszowego
Deklaracja i użycie kursora:
W DECLARE:
CURSOR nazwa IS SELECT ...
Po BEGIN:
OPEN nazwa; - otwarcie kursora
FETCH nazwa INTO zmienna; - ściągnięcie kolejnego wiersza
CLOSE nazwa; - zamknięcie kursora
Kursorów używamy zwykle w pętli np.:
LOOP
FETCH nazwa INTO zmienna;
EXIT WHEN nazwa%NOTFOUND;
...
END LOOP;
Atrybuty kursora:
nazwa%FOUND - ostatnia instrukcja FETCH zwróciła wiersz
nazwa%NOTFOUND - ostatnia instrukcja FETCH nie zwróciła wiersza
nazwa%ROWCOUNT - ilość zwróconych dotychczas wierszy
nazwa%ISOPEN - określa, czy kursor jest otwarty
Procedury:
CREATE [OR REPLACE] PROCEDURE nazwa (par [IN/OUT/INOUT] TYP, ...) AS
deklaracje
BEGIN
kod procedury
END;
Funkcje:
CREATE [OR REPLACE] FUNCTION nazwa (par [IN/OUT/INOUT] TYP, ...)
RETURN TYP AS
deklaracje
BEGIN
kod funkcji
RETURN wyrażenie;
END;
Wyzwalacze:
CREATE [OR REPLACE] TRIGGER nazwa
{BEFORE / AFTER} specyfikacja instrukcji
ON tabela
[FOR EACH ROW]
blok PL/SQL
Specyfikacje instrukcji:
INSERT, DELETE, UPDATE
Można je łączyć np. BEFORE INSERT OR UPDATE
Dla UPDATE można określić pola, których modyfikowanie spowoduje uruchomienie triggera np. UPDATE OF pole1, pole2
Odwołanie do starej/nowej wartości w wyzwalaczu:
:OLD.pole
:NEW.pole
Zmienne logiczne określające, co spowodowało uruchomienie wyzwalacza:
UPDATING, INSERTING, DELETING
Tworzenie sekwensji:
CREATE SEQUENCE nazwa_sekwencji
[INCREMENT BY k]
[START WITH n]
Bieżąca i kolejna wartości sekwencji:
nazwa_sekwencji.currval
nazwa_sekwencji.nextval