1
2
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.
3
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.
4
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.
5
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.
6
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.
7
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
8
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.
9
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.
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