background image

 

WYKŁAD 7.......................................................................................................................................................................... 2 

1. Czym jest SQL*PLUS? ................................................................................................................................................ 2 

2. Podad 3 sposoby tworzenia zmiennej tymczasowej. ................................................................................................ 2 

3. Definicje zmiennej dowiązanej. ................................................................................................................................ 2 

4. Z jakich części składa się blok anonimowy? .............................................................................................................. 2 

5. Które instrukcje SQL można umieszczad w blokach PL/SQL?.................................................................................... 3 

6. Jak wyświetlid wartośd zmiennej w bloku PL/SQL? *?* ............................................................................................ 3 

WYKŁAD 8.......................................................................................................................................................................... 3 

1. Instrukcja SQL%ROWCOUNT ..................................................................................................................................... 3 

2. Różnice między zmienną typu wierszowego a zmienną typu rekordowego *?* ...................................................... 3 

3. Różnice między funkcją a procedurą ........................................................................................................................ 4 

4. Kiedy stosuje się atrybuty %TYPE i %ROWTYPE *?* ................................................................................................. 4 

5. Typy parametrów w definicji podprogramu ............................................................................................................. 4 

6. Cechy pakietu ............................................................................................................................................................ 5 

WYKŁAD 9.......................................................................................................................................................................... 5 

1. Definicja i zastosowanie kursora jawnego ................................................................................................................ 5 

2. Definicja wyzwalacza (TRIGGER) ............................................................................................................................... 5 

3. Wyzwalacz DML *?* .................................................................................................................................................. 6 

4. Wyzwalacz systemowy .............................................................................................................................................. 6 

5. Wyzwalacz zastępujący ............................................................................................................................................. 6 

6. Zmiana statusu wyzwalacza ...................................................................................................................................... 7 

WYKŁAD 10........................................................................................................................................................................ 7 

1. Różnice między błędami kompilacji i wykonania. ..................................................................................................... 7 

2. Kolejnośd obsługi wyjątku. ........................................................................................................................................ 7 

3. Obsługa błędów niepredefiniowanych. .................................................................................................................... 7 

4. Da czego służy procedura Raise_Application_Error? ................................................................................................ 8 

5. Zastosowanie dyrektywy PRAGMA EXCEPTION_INIT. .............................................................................................. 8 

6. Czy zgłoszenie wyjątku jest równoznaczne z zakooczeniem działania programu. ................................................... 8 

WYKŁAD 11........................................................................................................................................................................ 9 

1. Pragma – przykład zastosowania. *?* ...................................................................................................................... 9 

2. Definicja transakcji .................................................................................................................................................... 9 

3. Własności ACID transakcji ......................................................................................................................................... 9 

4. Wymieo 5 anomalii transakcji ................................................................................................................................... 9 

5. Rodzaje blokad transakcji ......................................................................................................................................... 9 

6. Zakleszczenie transakcji .......................................................................................................................................... 10 

7. Transakcje autonomiczne - definicja....................................................................................................................... 10 

background image

 

 

WYKŁAD 7  

1. Czym jest SQL*PLUS? 

 

Prosty interfejs do bazy danych ORACLE. 

 

uruchamiany z wiersza poleceo.  

 

Umożliwiający wpisywanie instrukcji z klawiatury i uruchamianie skryptów zawierających te instrukcje.  

 

Wersje: klient z GUI, SQL Worksheet, iSQL*Plus, sqldeveloper.  

Możliwości: wykonywanie instrukcji, formatowanie, tworzenie bloków anonimowych.  
 

2. Podać 3 sposoby tworzenia zmiennej tymczasowej. 

 

Definicja w wewnątrz jednej instrukcji poprzez dodanie nazwy poprzedzonej znakiem &  

o  Służy do interaktywnego podstawiania wartości oraz nazw tabel i kolumn.  
o  select nazwisko from prac where id_zesp=  &numer_zesp;;  

Można uniknąd powtarzania wpisywania wartości zmiennej stosując &&  

o  select nazwisko, &&n_kol from  
o  &n_tab where &&n_kol= &n_war;  

 

Poleceniem DEFINE przed użyciem instrukcji SQL do wielokrotnego wykorzystania 

o  Przechowywana w bazie aż do jawnego usunięcia lub zakooczenia programu SQL*PLUS 
o  Define nr_zesp = 20;  

 

ACCEPT służy do wprowadzania nowej wartości dla zmiennej już istniejącej.  

o  służy do zdefiniowania i zainicjalizowaniu nowej zmiennej.  
o  umożliwia określenie typu dla zmiennej.  

Jeśli w skrypcie używa się zmiennych tymczasowych, to powinno się je numerowad i uruchamiad skrypt podając ich 
wartości w kolejności numerów, oddzielone spacjami.  

 

3. Definicje zmiennej dowiązanej. 

 

VARIABLE zm NUMBER (lub char(n), varchar2(n),  n>0)- deklaracja zmiennej dowiązanej.  

 

EXECUTE :zm := wyrażenie; przypisanie zmiennej dowiązanej wartości.  

 

Po ustaleniu wartości można zmienne dowiązane poprzedzone dwukropkiem używad w instrukcjach SQL i 
PL/SQL.  

 

PRINT zm- wypisanie wartości zmiennej dowiązanej zm w SQL *Plus.  

4. Z jakich części składa się blok anonimowy? 

Fragment kodu, który nie jest zachowany ani nie ma nazwy (wykonywany tylko w aktualnej sesji lub umieszczony w 
skrypcie)  

 

DECLARE- deklaracje obiektów PL/SQL jak zmienne, stałe, wyjątki, procedury.  

 

BEGIN- ciąg instrukcji do wykonania.  

 

EXCEPTION- obsługa wyjątków (błędów) 

 

END:  

 

Bloki mogą byd zagnieżdżone.  

 

background image

 

5. Które instrukcje SQL można umieszczać w blokach PL/SQL? 

SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLLBACK.  

 
6. Jak wyświetlić wartość zmiennej w bloku PL/SQL? *?* 

DECLARE 
 

v_text VARCHAR2(10);  --deklaracja 

BEGIN 
 

v_text := ‘hello’; -- przypisanie wartości 

 

dbms.output.Put_line(v.text); --wyświetlenie  

END 
 

WYKŁAD 8  

 

1. Instrukcja SQL%ROWCOUNT 

 

SQL%ROWCOUNT- liczba wierszy przetworzonych przez ostatnią instrukcję SQL.  

 

Użycie zmienne SQL%ROWCOUNT do obliczenia liczby usuwanych pracowników z zespołu o numerze 50.  

DECLAR usunieto NUMBER;  
BEGIN 
DELETE FROM prac WHERE id_zesp =50; 
usunieto := SQL%ROWCOUNT;  
DBMS_OUTPUT.PUT_LINE(usunieto);  
END; 
 

 
2. Różnice między zmienną typu wierszowego a zmienną typu rekordowego *?*  

Zmienne wierszowe 

DECLARE  
rek_osoby prac %ROWTYPE; - typ wierszowy. 

 

nie można używad bezpośrednio po słowie kluczowym VALUES w instrukcji INSERT TO.  
 

Zmienne rekordowe  

 

Typy rekordowe mogą byd zagnieżdżone  

 

Dostęp do pól rekordu jest przy pomocy notacji kropkowej  

 

Do zmiennej rekordowej można przypisad wartośd innej zmiennej rekordowej, ale tylko tego samego typu 
rekordowego.  

 

Typ  rekordowy  może  byd  zagnieżdżony,  wierszowy  składad  się może  tylko  z  prymitywów.  Wierszowy  reprezentuje 
bezpośrednio wiersz w tabeli. 

 

 

 

background image

 

3. Różnice między funkcją a procedurą 

 

Procedura- wykonanie akcji  

PROCEDURE nazwa *(lsta parametrów)+ IS *deklaracje+  
BEGIN instrukcje 
[EXCEPTION- obsługa wyjątków+  
END;  
 

 

Funkcja- obliczenie wartości  

FUNCTION nazwa *(lista parametrów)+  
RETURN nazwa_typu IS [deklaracje]  
BEGIN instrukcje  
[EXCEPTION- obsługa wyjątków+  
END;  

 

return- zwraca wartośd, musi wystąpid  

 
 
Różnica jest taka że funkcja musi zwrócid jakąś wartośd oraz zawierad słowo kluczowe return a procedura ma coś po 
prostu wykonad i nic nie zwraca. 

 

4. Kiedy stosuje się atrybuty %TYPE i %ROWTYPE *?*  

 

Atrybut %TYPE – do deklarowania zmiennej prostej na podstawie typu atrybutu relacji bazy danych lub typu 
innej zmiennej.  

 

 Atrybut %ROWTYPE – do deklarowania zmiennej rekordowej w oparciu o schemat relacji, kursora lub typ 
innej zmiennej rekordowej. 
 

5. Typy parametrów w definicji podprogramu 

Tryb w jakim wartości są przekazywane do podprogramu.  

 

IN -Przekazuje wartośd do programu ze środowiska wołającego.  wewnątrz parametr zachowuje się jak stała, 
nie można zmienid wartości 

 

OUT-  Przekazuje wartośd z programu do środowiska wołającego . wewnątrz parametr zachowuje się jak 
zmienna, która nie została zdefiniowana, jej wartośd jest zwracana do jednostki nadrzędnej.  

 

IN OUT- możliwe przekazywanie wartości do podprogramu i na zewnątrz.  

Dla OUT i IN OUT- można użyd NOCOPY- przesyłanie przez referencję a nie przez wartośd.   

 
 

 

 

background image

 

6. Cechy pakietu 

Pakiet- grupuje powiązane logiczne procedury w funkcje, zmienne, kursory.  

CECHY:  

 

ukrycie informacji- użytkownikowi jest udostępniana tylko specyfikacja pakietu (interfejs), implementacja 
procedur i funkcji jest niewidoczna.  

 

zwiększenie funkcjonalności- zmienne zadeklarowane w pakietach istnieją przez całą sesję użytkownika- 
mogą służyd do wzajemnej komunikacji dla różnych procesów.  

 

zwiększenie szybkości działania- przy pierwszym odwołaniu do pakietu cała jego zawartośd jest ładowana do 
pamięci.  

 

współdzielenie przez wielu użytkowników.  

 

możliwośd zmiany implementacji pakietu bez konieczności rekompilacji modułów zależnych.  

CECHY II:  

 

Elementy pakietu mogą byd ustawione w dowolnej kolejności. 

 

Deklaracja obiektu musi byd przed jego kodem.  

 

Dowolny obiekt zadeklarowany w nagłówku pakietu ma zasięg poza danym pakietem.  

 

Podprogramy z pakietu można przeciążad.  

 

WYKŁAD 9  

1. Definicja i zastosowanie kursora jawnego 

KURSOR 

 

Udostępnia podzbiór danych zdefiniowanych przez zapytanie.  

 

Dane pobierane są do pamięci i kursor jest do niej wskaźnikiem  

 

otwarcie kursora to pobranie części bieżących danych- zmiana, dodanie lub usunięcie danych po jego 
otwarciu nie będzie miało odzwierciedlenia w zbiorze który zwrócił kursor.  

KURSOR JAWNY 

 

deklarowane i kontrolowane przez programistę  

 

deklarowane w instrukcjach SELECT (najczęściej takich które zwracają więcej niż jeden wiersz)w części 
deklaracyjnej.  
 

 

Tymczasowa struktura służąca do pobierania wyniku zapytania SQL. 

 

Kursor umożliwia pobieranie rekordów sekwencyjnie, po jednym lub więcej na raz, a także przemieszczanie się 
po wynikach zapytania 

 

2. Definicja wyzwalacza (TRIGGER)  

 

Blok nazwany PL/SQL (lub napisany w JAVIE lub w C)- obiekt BD.  

 

uruchamiany niejawnie gdy zachodzi określone zdarzenie w BD.  

 

może uruchamiad instrukcje języka SQL oraz funkcje i procedury języka PL/SQL.  

background image

 

3. Wyzwalacz DML *?*  

DML  

 

uruchamiany w wyniku INSERT, UPDATE lub DELETE 

 

wykonywane przed lub po instrukcji  

 

dla jednej tabeli  

 

dla wszystkich lub wybranych wierszy tabeli, 

 

do audytowania, 

 

sprawdzania  

 

rejestrowania wartości przed ich zmodyfikowaniem przez instrukcje lub wyzwalacz.  

 

może reagowad na kilka zdarzeo 

 

nazwa wyzwalacz może byd taka sama jak nazwa tabeli (nie jest zalecane)  

Rodzaje wyzwalaczy DML 

 

TYP AFTER (po operacji DML) 

 

TYP BEFORE (przed operacją DML) 

 

TYP INSTED OF (zamiast operacji DML) 

4. Wyzwalacz systemowy 

Wykonywane w wyniku wystąpienia zdarzeo DDL (create, alter, drop) lub zdarzeo BD (uruchomienie, zamknięcie 
serwera, zalogowanie, wylogowanie użytkownika, błędy serwera).  

np:  STARTUP - AFTER. SHUTDOWN - BEFORE, SERVERERROR- AFTER, LOGON- AFTER, LOGOFF - BEFORE.  

 

5. Wyzwalacz zastępujący

 

Stosuje się aby  

 

umożliwid wprowadzanie zmian w perspektywie, której nie można zmodyfikowad 

 

do modyfikowania tabeli zagnieżdżonej w perspektywie.  

 

pozwala na wykonanie pewnej operacji zamiast inne operacji która uruchomiła wyzwalacz.  

 

zawsze typu ROW 

 

nie ma AFTER, BEFORE, WHEN 

 

znaczenie pozostałych parametrów bez zmian.  

 

ma możliwośd odczytu wartości :OLD i :NEW, nie można ich zmieniad.  

 

nie może byd zdefiniowany dla tabeli.  

 

 

background image

 

6. Zmiana statusu wyzwalacza 

 

Włączenie wyzwalacza  
ALTER TRIGGER nazwa_w ENABLE;  

 

Wyłączenie wyzwalacza 
ALTER TRIGGER nazwa_w DISABLE;  lub ALTER TABLE nazwa_tabeli ENABLE ALL TRIGGERS;  

 

Usuwanie wyzwalacza  
DROP TRIGGER nazwa_w 

o  Usunięcie tabeli usuwa związane z nią wyzwalacze.  

WYKŁAD 10  

1. Różnice między błędami kompilacji i wykonania. 

PLS - BŁĘDY KOMPILACJI 

 

wykrywa je kompilator PL/SQ L i informuje użytkownika 

 

program nie może ich obsłużyd, bo nie zaczął się wykonywad 

 

poprawia programista (obsługa interaktywna) 
Komunikat o błędzie zawiera informację w którym wierszu *i kolumnie+ wystąpił błąd. 
Wynikają z pomyłek w trakcie pisania kodu np: pominięcie średnika. 
 

ORA - BŁĘDY WYKONANIA 

 

mogą wystąpid w trakcie wykonania programu 

 

są zgłaszane i przechwytywane przez programy obsługi wyjątków. 
Mogą znajdowad się w sekcji: deklaracji, wykonawczej, obsługi błędów 

 
2. Kolejność obsługi wyjątku. 

 

w momencie zaistnienia wyjątku wykonanie aktualnego bloku kooczy się. 

 

wywołuje się funkcję obsługi tego wyjątku. 

 

w przypadku zgłoszenia wyjątku, szukana jest klauzula w najbliższym bloku, potem w bloku wyżej, aż do 
klauzuli w bloku zewnętrznym (obejmującym). 

 

sterowanie jest zwracane do następnej instrukcji w bloku nadrzędnym (zawierającym blok, w którym 
wystąpił wyjątek) 

 

jeśli taki blok nie istnieje to sterowanie jest zwracane do systemu.  

 
3. Obsługa błędów niepredefiniowanych. 

-Deklaracja wlasnego wyjątku (w sekcji IS): 
Declare wyjatek EXCEPTION; 
-Wywołanie wyjątku: 
RAISE wyjatek; 
-Mamy 2 sposoby: 

 

Za pomocą klauzuli WHEN OTHERS  w połączeniu z funkcją SQLCODE I SQLERPM 

 

Kojarzymy  wyjątek  użytkownika  z  odpowiednim  kodem  błędu  i  obsługujemy  poprzez 
mechanizm obsługi błędów użytkownika 

background image

 

 
4. Da czego służy procedura Raise_Application_Error? 

Służy do tworzenia nowych błędów z własnym kodem i opisem błędu 

Raise_Application_Error(err_no number, err_msg 
varchar2, keep_errors boolean) 
- err_no – numer z przedziału *-20000,-20999] 
- err_msg – napis o długości < 512 bajtów 
- keep_errors (true – nowy błąd zostanie dopisany 
do listy już zdefiniowanych błędów, false – nowy 
błąd zastąpi listę już zgłoszonych błędów) 
P R Z Y K Ł A D : 
Raise_Application_Error(-20100,’Błąd’, true) 

 
5. Zastosowanie dyrektywy PRAGMA EXCEPTION_INIT. 

Jest  używana  do  skojarzenia  wyjątku  zdefiniowanego  przez  użytkownika  z  numerem  błędu  zdefiniowanym  przez 
ORACLE  
np. 

CREATE OR REPLACE PACKAGE BODY 
wyroznienia AS 
FUNCTION nagroda (p_id_prac NUMBER) 
RETURN NUMBER 
IS 
PRAGMA AUTONOMOUS_TRANSACTION; 
PRAGMA EXCEPTION_INIT(zakleszczenie, -60); 
BEGIN 
 

--cialo funkcji 

EXCEPTION 
WHEN zakleszczenie THEN 
 

--obsługa błędu 

END wyroznienia; 
 

 
6. Czy zgłoszenie wyjątku jest równoznaczne z zakończeniem działania programu. 

Nie,  ponieważ  kiedy  zostaje  zgłoszony  wyjątek  następuje  przerwanie  programu  i  przejście  do  programu  obsługi 
wyjątków.  Po  obsłudze  wyjątku  program  może  byd  kontynuowany  lub  zatrzymany.  Można  tym  sterowad  poprzez 
zagnieżdżanie bloków. 

 

 

 

background image

 

WYKŁAD 11  

1. Pragma – przykład zastosowania. *?* 

 

np. PRAGMA RESTRIC_REFERENCES(nazwa_funkcji, opcja,...) - określa sposób współdziałania funkcji z bazą 
danych i zmiennymi pakietu, wymusza  sprawdzenia czystości funkcji w stosunku do informacji podanych na 
etapie kompilacji: 
WNDS - funkcja nie modyfikuje stanu BD 
WNPS - funkcja nie modyfikuje wartości zmiennych pakietu 

CREATE OR REPLACE PACKAGE BODY 
wyroznienia AS 
FUNCTION nagroda (p_id_prac NUMBER) 
RETURN NUMBER; 
PRAGMA RESTRICT_REFERENCES (nagroda, WNDS, WNPS); 
zakleszczenie EXCEPTION; 
END; 

 
2. Definicja transakcji 

 

abstrakcyjna reprezentacja programu użytkownika 

 

jednostka pracy 

 

sekwencja logicznie powiązanych operacji na bazie danych, która przeprowadza bazę danych z jednego stanu 
spójnego w inny stan spójny. 

 
3. Własności ACID transakcji 

 

niepodzielnośd (atomicity) - albo zostaną wykonane wszystkie operacje albo żadna 

 

spójnośd (consistency) - przeprowadzenie BD z jednego stanu spójnego do innego stanu spójnego, 
nienaruszenie ograniczeo integralnościowych. 

 

izolacja (isolation) - mimo współbieżnego wykonywania, transakcje widzą stan BD tak, jak gdyby były 
wykonywane w sposób sekwencyjny. 

 

trwałośd (durability) - po zakooczeniu transakcji zmiany są utrwalone. Awaria sprzętu nie niszczy danych. 

 
4. Wymień 5 anomalii transakcji 

1.  odczyt niezatwierdzonych danych - przeczytanie wiersza, który nigdy nie był zatwierdzony 
2.  niepowtarzalny odczyt - czyta ponownie wiersz, który został zmieniony lub usunięty 
3.  fantom - wiersz, którego nie było w tabeli na początku transakcji, a który został wprowadzony przez 

zatwierdzoną transakcję w trakcie wykonywania transakcji 

4.  stracona aktualizacja  
5.  zapis i wycofanie niezatwierdzonych danych - po wykonaniu rollback baza może nie byd spójna. 

 
5. Rodzaje blokad transakcji 

 

blokada (lock) - jedna z transakcji rezerwuje sobie dostęp do obiektu. Inne transakcje nie mają dostępu do 
obiektu lub mają dostęp ograniczony. 

background image

10 

 

 

blokada wyłączna (exclusive lock) - transakcja zablokowywuje jakikolwiek dostęp do obiektu dla innych 
transakcji. Tylko jedna transakcja może mied założoną wyłączną blokadę na obiekcie i w tym czasie nie może 
byd założonej żadnej innej blokady nawet współdzielonej  

 

blokada współdzielona (shared lock) - inne transakcje mogą czytad, ale nie mogą modyfikowad obiektu. Kilka 
transakcji może jednocześnie pracowad na tej samej tabeli. jeśli transakcja zakłada współdzieloną blokadę, 
inne transakcje też mogą założyd współdzieloną blokadę, ale nie mogą założyd wyłącznej blokady 

 
6. Zakleszczenie transakcji 

 

jeśli transakcja T1 zablokowała zasób X i żąda dostępu do zasobu Y. 

 

jeśli transakcja T2 zablokowała zasób Y i żąda dostępu do zasobu X, 
TO : ani T1, ani T2 nie mogą dalej kontynuowad jakiejkolwiek akcji. 
System zawiesił się. 

 
7. Transakcje autonomiczne - definicja 

 

rozpoczyna się w kontekście innej transakcji określanej transakcją macierzystą, ale jest od niej niezależna 

 

może byd zatwierdzona lub wycofana niezależnie od stanu transakcji macierzystej 

 

wykonywanie komendy COMMIT lub ROLLBACK w jednym programie nie wpływa na żadne inne dane, które 
mogłyby zostad utworzone poza tym programem. 

 

wewnątrz transakcji autonomicznej można zastosowad dowolną instrukcję sterowania transakcją wyłącznie z 
instrukcjami COMMIT, ROLLBACK, SAVEPOINT, ROLLBACK TO