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.