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