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