1
|
- Koncepcja języka, zmienne i stałe, typy zmiennych, nadawanie wartości
zmiennym, instrukcje warunkowe, pętle, sterowanie przebiegiem programu
|
2
|
- Język PL/SQL to rozszerzenie SQL o elementy programowania
proceduralnego i obiektowego. PL/SQL umożliwia wykorzystanie:
- zmiennych i stałych
- struktur kontrolnych, w tym instrukcji warunkowych, pętli, etykiet i
instrukcji skoku, instrukcji wyboru warunkowego
- kursorów
- wyjątków i mechanizmu obsługi błędów
- Za pomocą języka PL/SQL tworzy się
- anonimowe bloki programu
- procedury i funkcje składowane
- pakiety
- wyzwalacze bazy danych
|
3
|
- DECLARE
- v_magazyn NUMBER(5);
- BEGIN
- SELECT liczba_sztuk INTO v_magazyn FROM zapasy
- WHERE produkt = ’MLEKO UHT’
- FOR UPDATE OF liczba_sztuk; --odczytujemy liczbę w magazynie
- IF (v_magazyn > 0) THEN –-sprawdzamy ilość w magazynie
- UPDATE zapasy SET liczba_sztuk = liczba_sztuk - 1
- WHERE produkt = ’MLEKO UHT’;
- INSERT INTO historia_zakupow
- VALUES (’Kupiono mleko UHT’, SYSDATE);
- ELSE
- INSERT INTO historia_zakupow
- VALUES (’Brak mleka UHT w magazynie’, SYSDATE);
- END IF;
- COMMIT;
- END;
|
4
|
- Program składa się z jednostek zwanych blokami.
- Każdy blok odpowiada problemowi (podproblemowi)
- Bloki mogą być dowolnie zagnieżdżone
- Każdy blok składa się z trzech części:
- deklaracji (o)
- rozkazów (w)
- obsługi błędów (o)
- Bloki mogą być zagnieżdżane w części rozkazów lub/i części obsługi
błędów
|
5
|
- Zmienne proste (np. typu numerycznego, znakowego, daty)
- Zmienne podtypu (np. zdefiniowanego przez użytkownika)
- Zmienne złożone (np. rekordy, tablice, kolekcje, obiekty)
|
6
|
- Rekord to zbiór powiązanych danych różnych typów, opisujących jedno i to
samo pojęcie. Przed zadeklarowaniem zmiennej rekordowej trzeba
zdefiniować typ rekordowy
|
7
|
- Tablice indeksowane (index-by tables): nieograniczony rozmiar,
automatycznie rozszerzane, nie mogą być typem atrybutu w bazie danych,
indeks tablicy może być ujemny
- Tablice zagnieżdżone (nested tables): nieograniczony rozmiar,
rozszerzane za pomocą procedury EXTEND, mogą być typem atrybutu w
relacji, mogą być użyte w poleceniach DML, nie zainicjalizowana tablica
jest pusta, przechowywane fizycznie w osobnej relacji (store table),
indeks tablicy musi być dodatni
- Kolekcje o zmiennym rozmiarze (varrays): ograniczony i rozszerzalny
rozmiar, przechowywane w zwartej postaci in-line, indeks kolekcji musi
być dodatni
|
8
|
- Atrybut %TYPE zawiera typ innej zmiennej lub typ atrybutu w bazie
danych.
- Atrybut %ROWTYPE zawiera typ rekordowy reprezentujący strukturę
pojedynczej krotki z danej relacji. Atrybuty w krotce i odpowiadające im
pola w rekordzie mają te same nazwy i typy.
|
9
|
- Nadanie wartości poprzez przypisanie
- UWAGA!!!
- Zmienna, która została zadeklarowana lecz nie została zainicjalizowana,
posiada wartość NULL. Użycie takiej zmiennej może spowodować
nieprawidłowe wyniki.
|
10
|
- Nadanie wartości przez wczytanie danych z bazy danych do zmiennej
poleceniem SELECT ... INTO ...
- Nadanie wartości przez przekazanie zmiennej jako parametru typu IN OUT
lub OUT do procedury lub funkcji
|
11
|
- Nadanie wartości przez wczytanie danych z bazy danych do zmiennej za
pomocą klauzuli RETURNING poleceń INSERT/UPDATE/DELETE
- Typowe zastosowanie RETURNING: odczyt wartości ustawionych na poziomie
bazy danych (np. wartości klucza głównego)
|
12
|
- Stałe deklarujemy z użyciem słowa kluczowego CONSTANT. Stała musi zostać
zainicjalizowana podczas deklaracji. Po utworzeniu stałej jakiekolwiek
modyfikacje jej wartości są niedozwolone.
|
13
|
|
14
|
- Typy danych dostępne w PL/SQL nie odpowiadają dokładnie analogicznym
typom dostępnym w SQL.
- Typy BINARY_INTEGER i PLS_INTEGER: -231 ¸ 231. Ich podtypami są typy: POSITIVE, POSITIVEN,
NATURAL, NATURALN i SIGNTYPE (-1, 0, 1).
- Typ NUMBER: 10-130 ¸ 10125. Jego podtypami są typy: DECIMAL, INTEGER,
FLOAT, REAL, NUMERIC.
- Typy CHAR, VARCHAR2, RAW, LONG: 32767 bajtów
- Typ BOOLEAN: TRUE, FALSE, NULL
|
15
|
- Każdy typ danych definiuje zbiór poprawnych wartości i zbiór
operatorów, które mogą być zastosowany do zmiennej danego typu. Podtyp
definiuje ten sam zbiór operatorów co jego typ nadrzędny, lecz zawęża
zbiór poprawnych wartości.
|
16
|
- Pobieranie informacji od użytkownika – zmienne podstawienia.
- Wypisywanie informacji na konsoli – procedura PUT_LINE z pakietu
DBMS_OUTPUT.
- ustaw zmienną SERVEROUTPUT narzędzia SQL*Plus na wartość ON przed
wykonaniem programu.
|
17
|
|
18
|
|
19
|
- Warunek musi zwracać wartość logiczną. Sekwencja poleceń jest
wykonywana, gdy wartością warunku jest TRUE. Jeśli wartością warunku
jest FALSE lub UNKNOWN to sekwencja nie jest wykonywana.
|
20
|
- Przed wykonaniem ćwiczenia ustaw zmienną środowiska SQL*Plus:
- SQL> SET SERVEROUTPUT ON SIZE 1000000
|
21
|
- Instrukcja CASE może występować z selektorem (selektorem może być
dowolnie złożone wyrażenie, ale najczęściej jest to jedna zmienna) lub z
listą wyrażeń (searched CASE)
|
22
|
|
23
|
- Prosta pętla wykonuje się w nieskończoność. Wyjście z pętli jest
możliwe tylko jako efekt wykonania polecenia EXIT lub EXIT WHEN. W
każdym przebiegu pętli wykonuje się sekwencja poleceń. Po ich wykonaniu
kontrola powraca do początku pętli.
|
24
|
|
25
|
- Przed każdą iteracją sprawdzany jest warunek. Pętla jest wykonywano tak
długo, jak długo warunek ma wartość TRUE. Jeżeli wartość warunku wynosi FALSE
lub UNKNOWN to kontrola przechodzi do pierwszego polecenia po pętli.
Jeżeli warunek na samym początku nie był spełniony, to pętla nie wykona
się ani razu.
- UWAGA!!!
- Pamiętaj, aby w sekwencji operacji znalazło się polecenie, które zmieni
warunek, w przeciwnym przypadku grozi pętla nieskończona.
|
26
|
|
27
|
- Pętla FOR wykonuje się określoną liczbę razy. Liczba iteracji jest
określona przez zakres podany między słowami kluczowymi FOR i LOOP.
Zakres musi być typu numerycznego, w przedziale –231 ¸ 231
- Słowo kluczowe REVERSE odwraca kierunek iteracji
- Wewnątrz pętli nie wolno nadawać wartości zmiennej iterującej
- Jeśli dolna granica jest wyższa niż górna granica to pętla nie wykona
się ani razu
- Obie granice zakresu iteracji nie muszą być statyczne
- Zmienna iterująca nie musi być wcześniej deklarowana ani inicjalizowana
- Do wcześniejszego wyjścia z pętli można użyć polecenia EXIT
|
28
|
|
29
|
- Polecenie GOTO bezwarunkowo przekazuje kontrolę wykonywania programu do
miejsca wskazywanego przez etykietę związaną z poleceniem. Polecenie
NULL nie wykonuje żadnej akcji.
- Etykieta musi poprzedzać polecenie wykonywalne
- GOTO nie może przeskakiwać do warunkowych części poleceń IF-THEN-ELSE,
CASE, do polecenia LOOP i do bloku podrzędnego
- GOTO nie może wyskakiwać z podprogramu oraz procedury obsługi błędu
|
30
|
|