Wszystko należy robid w SQL Plus. Transakcje Dwiczenie A 1

Transkrypt

Wszystko należy robid w SQL Plus. Transakcje Dwiczenie A 1
Wszystko należy robid w SQL Plus.
Transakcje
Dwiczenie A
1. Utworzyd tabelę testową:
CREATEA TABLE TEST ( NAME VARCHAR2(20) );
COMMIT;
2. Otworzyd drugie połączenie do bazy danych.
3. W pierwszym połączeniu wstawid do tabeli testowej 1 wiersz, ale nie potwierdzad na razie
(bez COMMIT)
4. Sprawdzid czy wiersz ten jest widoczny z drugiego połączenia do bazy
5. Potwierdzid w pierwszym połączeniu wstawienie wiersza pisząc COMMIT
6. Sprawdzid w drugiej tabeli czy wiersz jest widoczny
7. Usunąd wstawiony wiersz i potwierdzid
Dwiczenie B
1.
2.
3.
4.
5.
Utworzyd testowy wiersz w tabeli w pierwszym połączeniu i potwierdzid.
Sprawdzid w drugim połączeniu czy wiersz jest widoczny.
W pierwszym połączeniu zmodyfikowad wartośd NAME na jakąś inną i nie potwierdzad.
W drugim połączeniu zmodyfikowad wartośd NAME na jeszcze inną wartośd.
W drugim połączeniu SQL Plus się zatrzyma i będzie czekał na zakooczenie transakcji
wykonywanej w pierwszym połączeniu.
6. Potwierdzid transakcję w pierwszym połączeniu.
7. Potwierdzid transakcję w drugim połączeniu.
8. Usunąd wiersz i potwierdzid.
W momencie wykonania instrukcji UPDATE w pierwszym połączeniu, wiersz ten został
zablokowany – tzn. inne transakcje musiały poczekad, aż skooczy się transakcja, która go
zmodyfikowała – skooczy się, czyli zostanie potwierdzona lub cofnięta.
Żeby zablokowad wiersze dla danej transakcji, tak żeby inne transakcje nie mogły ich
modyfikowad nie trzeba koniecznie ich zmieniad. Można jest wybrad za pomocą instrukcji
SELECT … FROM … FOR UPDATE;
Proszę sprawdzid czy zwykły SELECT bez klauzuli FOR UPDATE i SELECT z tą klauzulą blokują
transakcję.
Dwiczenie C
1. Usunąd wszystkie wiersze z tabeli testowej i potwierdzid
2. Utworzyd skrypt w notatniku :
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Wstawid wiersz gdzie name = ‘1’
Utworzyd SAVEPOINT o nazwie punkt1
Wstawid wiersz gdzie name = ‘2’
Utworzyd SAVEPOINT o nazwie punkt2
Zmodyfikowad wiersz gdzie name=’1’ na name=’11’
Utworzyd SAVEPOINT o nazwie punkt3
Usunąd wiersz gdzie name = ‘2’
Koniec skryptu, uruchomid skrypt w SQL Plus
Potwierdzid transakcję (COMMIT) i zobaczyd wiersze w tabeli.
Usunąd wszystkie wiersze i wykonad skrypt ponownie
Cofnąd całą transakcję (ROLLBACK) i zobaczyd wiersze w tabeli.
Wykonad skrypt ponownie
Cofnąd transakcję do punkt3 i zobaczyd wiersze.
Cofnąd transakcję do punkt2 i zobaczyd wiersze.
Cofnąd transakcję do punkt1 i zobaczyd wiersze.
Potwierdzid transakcję
Prawa dostępu
Dwiczenie A
1.
2.
3.
4.
Osoba 1 nadaje wszystkie prawa do tabeli testowej osobie 2
Osoba 2 sprawdza czy ma dostęp do tabeli osoby 1
Osoba 1 zabiera wszystkie prawa do tabeli testowej osobie 2
Osoba 2 sprawdza czy ma dostęp do tabeli osoby 1
Dwiczenie B
1. Osoba 1 nadaje wszystkie prawa do tabeli testowej osobie 2 tak, żeby osoba 2 mogła
nadawad prawa do tabeli osoby 1 innym osobom
2. Osoba 2 nadaje prawa do tabeli osoby 1 osobie 3
3. Osoba 3 sprawdza czy ma dostęp do tabeli osoby 1
4. Osoba 1 zabiera prawa do swojej tabeli osobie 2 i osobie 3
Dwiczenie C
1. Osoba 1 nadaje prawa do tabeli testowej wszystkim
2. Dowolna osoba sprawdza czy tabela osoby 1 jest dostępna
3. Osoba 1 zabiera prawa do tabeli testowej wszystkim
Dwiczenie D – wykonad dwa razy – tak, żeby każdy był raz osobą 1 i raz osobą 2
1.
2.
3.
4.
5.
6.
Osoba 1 nadaje prawa do odczytywania tabeli testowej osobie 2
Osoba 2 sprawdza czy może odczytywad tabelę oraz czy może wstawid do niej wiersz
Osoba 1 nadaje dodatkowe prawa umożliwiające wstawienie wiersza osobie 2
Osoba 2 wstawia wiersz i próbuje go zmodyfikowad
Osoba 1 nadaje dodatkowe prawa umożliwiające modyfikacje wiersza osobie 2
Osoba 2 modyfikuje wiersz i próbuje go usunąd
7. Osoba 1 nadaje dodatkowe prawa umożliwiające usunięcie wiersza osobie 2
8. Osoba 2 usuwa wiersz
9. Osoba 1 odbiera wszystkie nadane prawa osobie 2
Funkcje analityczne
Sprawdzid działanie funkcji analitycznych takich jak : SUM, AVG, RANK, FIRST, LAST, MIN, MAX, NTILE,
LEAD, CUME_DIST, ROW_NUMBER
Jeśli chodzi o SUM, AVG, MIN, MAX – nie mają to byd funkcje agregujące, tylko analityczne.
Przykład 1:
W celu napisania zapytania, które zwracało by nazwisko pracownika, imię pracownika, zarobki
pracownika, numer departamentu oraz sumaryczne zarobki w departamencie, trzeba byłoby użyd
podzapytania:
SELECT e1.first_name, e1.last_name, e1.department_id, e1.salary,
(SELECT SUM(e2.salary) FROM hr.employees e2 WHERE e2.department_id =
e1.department_id)
FROM hr.employees e1;
Natomiast można to bardzo prosto zrobid za pomocą funkcji analitycznej SUM:
SELECT first_name, last_name, department_id, salary,
SUM(salary) OVER (PARTITION BY department_id)
FROM hr.employees;
Dwiczenie : wypisad za pomocą funkcji analitycznych ilokrotnie więcej zarabia osoba najlepiej
zarabiająca w danym dziale w stosunku do każdej innej osoby z tego działu.
Proszę otworzyd dokumentację ORACLE, do której link jest na stronie laboratorium i zobaczyd opis
wymienionych funkcji analityczny oraz wykonad przykładowe zapytania.

Podobne dokumenty