Perspektywa ( WIDOK )
Transkrypt
Perspektywa ( WIDOK )
Wykład V Perspektywa ( WIDOK ) - wirtualna tabela Intuicyjnie, perspektywa jest pewnego rodzaju „ oknem „, przez które użytkownik bazy danych widzi udostępniane przez nią dane • • • • perspektywa bazuje na tabelach, na innych perspektywach lub tabelach i perspektywach z użytkowego punktu widzenia, perspektywa posiada taką samą strukturę jak tabela na poziomie fizycznym różni się od tabeli tym, że nie posiada własnych danych w słowniku bazy danych (metadane ) perspektywa jest przechowywana w postaci zapytania ją definiującego Cele stosowania perspektyw • • • • • ograniczenie i autoryzacja dostępu do danych ułatwienie pracy z danymi możliwość prezentowania tych samych danych w różny sposób zapewnienie logicznej niezależności danych poprzez odseparowanie aplikacji od schematu konceptualnego bazy danych możliwość wprowadzenia dodatkowego poziomu ograniczeń integralnościowych ( klauzula WITH CHECK OPTION ) składnia CREATE [ OR REPLACE ] VIEW < nazwa > [ ( <lista_nazwy_kolumn > ) ] AS SELECT . . . [{ WITH READ ONLY | WITH CHECK OPTION }] ; • • • wyrażenia nie będące kolumnami, z klauzuli SELECT podzapytania, muszą być zaopatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich kolumn wyniku podzapytania istnieje możliwość modyfikacji danych za pośrednictwem pod warunkiem, że polecenie będzie dla systemu jednoznaczne ( uniemożliwiają to grupowanie, funkcje, złączenia, podzapytania, porządkowanie, DISTINCT, wyrażenia złożone, brak klucza głównego, brak uprawnień, ograniczenie WITH READ ONLY) opcja WITH CHECK OPTION – umożliwia sprawdzenie, czy modyfikowane za pośrednictwem perspektywy dane spełniają warunki logiczne zawarte wewnątrz podzapytania perspektywy przykłady: CREATE OR REPLACE VIEW Zespoly_pracownicze ( nazwa, liczba_prac ) AS SELECT nazwa, count(nr_akt) FROM Pracownicy RIGHT JOIN Dzialy USING (id_dzialu) GROUP BY nazwa; 1 Wykład V CREATE OR REPLACE VIEW Szefowie ( nazwisko, stanowisko, staz ) AS SELECT nazwisko, stanowisko, trunc(months_between(sysdate, data_zatr)/12) FROM Pracownicy WHERE nr_akt IN ( SELECT DISTINCT kierownik FROM Pracownicy ); CREATE OR REPLACE VIEW Wynagrodzenia AS SELECT p.nr_akt, p.nazwisko, p.stanowisko, p.placa FROM Pracownicy p WHERE p.placa < ( SELECT placa FROM Pracownicy WHERE nr_akt = p.kierownik ) WITH CHECK OPTION constraint za_wysokie_wynagrodzenie ; CREATE OR REPLACE VIEW Studentki AS SELECT nr_albumu, nazwisko, imiona,rok, rodzaj_studiow FROM Studenci WHERE imiona LIKE '%A' AND rok IS NOT NULL ORDER BY nazwisko ; SELECT * FROM Szefowie WHERE staz >= 20 AND stanowisko = 'DYREKTOR' SELECT * FROM Studentki WHERE rok= 2 AND rodzaj_studiow =' INŻ_ST'; Dodatkowe polecenia języka SQL dotyczące perspektyw: DESCRIBE < nazwa_perspektywy > DROP VIEW <nazwa_perspektywy > ; polecenie UPDATE służy do aktualizacji zawartości wierszy tabel lub perspektyw składnia: UPDATE { <nazwa_tabeli> | <nazwa_perspektywy>} SET { {<nazwa_atrybutu1> = <wyrażenie> |<podzapytanie>| DEFAULT | NULL}, {<nazwa_atrybutu2> = <wyrażenie> |<podzapytanie>| DEFAULT | NULL}, . . .} [WHERE <warunek_logiczny> ]; 2 Wykład V przykłady: UPDATE Studenci SET rok = rok + 1 WHERE rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET rok = rok – 1 WHERE nr_albumu IN ( '111','100'); UPDATE Pracownicy SET placa = placa * 1.2 WHERE nr_akt IN ( SELECT kierownik FROM Pracownicy ); UPDATE Pracownicy SET stanowisko='TECHNOLOG', placa= ( SELECT placa_min+0.5*(placa_max-placa_min) FROM Stanowiska WHERE stanowisko = 'TECHNOLOG' ) WHERE stanowisko = 'LABORANT'; UPDATE Wynagrodzenia SET placa= 5500 WHERE nazwisko='MALIK'; SQL Error: ORA-01402: naruszenie klauzuli WHERE dla perspektywy z WITH CHECK OPTION 01402. 00000 - "view WITH CHECK OPTION where-clause violation" polecenie INSERT pozwala wstawiać do tabeli lub perspektywy nowe wiersze. składnia: INSERT INTO { <nazwa_tabeli> | <nazwa_perspektywy>} [ (<nazwa_atrybutu1> [, . . . ] ) ] { DEFAULT VALUES | VALUES ( <wartość1 [, . . .] ) | SELECT . . . } ; przykłady: INSERT INTO Dzialy VALUES (85,' Logistyka','Radom'); INSERT INTO Pracownicy ( nr_akt, nazwisko,stanowisko ) VALUES ( 700, 'Nowak', 'RADCA'); SQL Error: ORA-02291: naruszono więzy spójności (. . . .KLUCZ_OBCY_ST) - nie znaleziono klucza nadrzędnego 02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found" INSERT INTO Pracownicy VALUES (1002, 'NOWAK', 'PRAKTYKANT', 8902, sysdate, NULL, 2100, 0, NULL, 50); INSERT INTO Absolwenci ( nazwisko, imiona, rocznik ) SELECT nazwisko, imiona, to_char(sysdate,'YYYY') FROM Studenci WHERE rodzaj_studiow='INŻ_ST' AND semestr='VII' ; INSERT INTO Szefowie VALUES ('OLEJNIK','RADCA',null); SQL Error: ORA-01733: w tym miejscu kolumna wirtualna nie jest dozwolona 01733. 00000 - "virtual column not allowed here" 3 Wykład V polecenie DELETE usuwa wiersze z danej tabeli lub perspektywy składnia: DELETE FROM { <nazwa_tabeli> | <nazwa_perspektywy> } [ WHERE <warunek_logiczny> ]; przykłady: DELETE FROM Dzialy WHERE id_dzialu IN ( 30, 60, 80 ); SQL Error: ORA-02292: naruszono więzy spójności (…...KLUCZ_OBCY_DZ) - znaleziono rekord podrzędny 02292. 00000 - "integrity constraint (%s.%s) violated - child record found" DELETE FROM Studenci WHERE rok = 5; SQL Error: ORA-01031: niewystarczające uprawnienia 01031. 00000 - "insufficient privileges" DELETE FROM Robocza; DELETE FROM Zespoly_pracownicze WHERE nazwa = 'MAGAZYN'; SQL Error: ORA-01732: na tej perspektywie operacja manipulowania danymi nie jest dozwolona 01732. 00000 - "data manipulation operation not legal on this view" Metadane ( perspektywy słownikowe ) informacje o ograniczeniach - USER_CONSTRAINTS informacje o kolumnach związanych ograniczeniami - USER_CONS_COLUMNS SELECT table_name,constraint_name, constraint_type,column_name FROM User_constraints NATURAL JOIN User_cons_columns; informacja o aktualizacji perspektyw - USER_UPDATABLE_COLUMNS SELECT * FROM USER_UPDATABLE_COLUMNS; 4