Widoki/Perspektywy
Transkrypt
Widoki/Perspektywy
Widoki/Perspektywy Podstawy ● ● Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Usuwanie widoku DROP VIEW [nazwa_widoku]; Przykład 1 ● ● Przykład najprostszego widoku z aliasami na nazwy kolumn Rezultat działania Przykład 2 ● ● Klauzula WHERE Możliwość wykorzystania funkcji FORCE CREATE OR REPLACE FORCE VIEW [nazwa_widoku] AS SELECT * FROM [nieistniejaca_tabela]; ● Możliwość listowania widoków SELECT object_name, status FROM user_objects WHERE object_type = 'VIEW'; Widoki z możliwością aktualizacji (Updatable Views) Nie mogą zawierać w sobie (co jest jasne z punktu widzenia ich zastosowania) ● – – – – – – – – – – INTERSECT, MINUS, UNION, UNION ALL GROUP BY ORDER BY CONNECT BY START WITH DISTINCT Funkcji agregujących Kolekcji w sekcji SELECT Podzapytań w sekcji SELECT Złączeń Przykład ● ● Przykład widoku z możliwością UPDATE ...SET Przykład widoku uniemożliwiającego UPDATE (np. z DISTINCT) Wymuszony tylko do odczytu CREATE OR REPLACE VIEW [nazwa_widoku] AS [SELECT ...] WITH READ ONLY; Przykład ● Przykład widoku „read only” Widoki Oracle (V$) ● np. select value from v$parameter where name = 'db_block_size' Widok z WITH CHECK OPTION ● Pozwala na kontrolowanie dodawanych danych do widoku, tak aby były widoczne w widoku (Przykład) Pełne zależności (11g) Widoki zmaterializowane (?! → materialized views) ● Widoki zmaterializowane pozwalają na dostęp do zdalnych danych (często nazywane migawkami) http://docs.oracle.com/cd/B10501_01/server.920/a96567/rep81072.gif Widoki zmaterializowane mogą być typu ● – – – Tylko do odczytu Z możliwością aktualizacji Z możliwością zapisu CREATE MATERIALIZED VIEW hr.employees AS SELECT * FROM [email protected]; CREATE MATERIALIZED VIEW hr.departments FOR UPDATE AS SELECT * FROM [email protected]; CREATE MATERIALIZED VIEW LOG ON [widok_zm] Zastosowanie ● ● Przez to, że Oracle ma możliwość aktualizowania widoków zmaterializowanych na podstawie jednego źródła (do wielu), możliwe jest wykorzystanie ich do replikacji bazy danych. Możliwości optymalizacji Pakiet DBMS_MVIEW Przykład ● TODO → ciekawszy przykład Kilka wzmianek o różnych obiektach, wynikłych z laboratorium ● ● Wyzwalacze Obiekty Wyzwalacze Podział wyzwalaczy w Oracle jest znacznie szerszy niż ten znany z innych prostszych baz danych. Mamy tu możliwość nie tylko podpinania wyzwalaczy pod zdarzenia związane z instrukcjami DML ale także i z instrukcjami DDL, ogólnie podział można przedstawić jako: ● – – Wyzwalacze DML (i tu działające na wierszach, tabelach lub na obu jednocześnie) Wyzwalacze DDL (wraz z zestawem funkcji pomocniczych). Wyzwalacze DML (statement – działające w obrębie tabeli) ● ● Wyzwalacze działające w obrębie tabeli, podobnie jak większość obiektów zapisane w schemacie z możliwością posiadania deklaracji i ciała. Należy uważać na spójność wyzwalaczy Deklaracja CREATE OR REPLACE TRIGGER <nazwa_wyzwalacza> [<ENABLE | DISABLE>] <BEFORE | AFTER> <ACTION> [OR <ACTION> OR <ACTION>] ON <nazwa_tabeli> [FOLLOWS <schemat.nazwa_wyzwalacza>] DECLARE <deklaracja_zmiennych> BEGIN <kod_wyzwalacza> EXCEPTION <obsluga_wyjatkow> END <nazwa_wyzwalacza>; / Przykłady ● ● Prosty przykład Możliwość uporządkowania kolejności wywołania za pomocą FOLLOWS Wyzwalacze DML (row level – działające w obrębie wierszy) ● ● Zasady podobne jak poprzednio ale mamy możliwość działania bezpośrednio na wierszach. Dodatkowo możemy określić w jakim stanie znajdował się wiersz przed/po wywołaniu za pomocą predefiniowanych obiektów Deklaracja CREATE OR REPLACE TRIGGER <nazwa_wyzwalacza> [FOLLOWS <schemat.nazwa_wyzwalacza>] [<ENABLE | DISABLE>] <BEFORE | AFTER> <ACTION> OR <ACTION> OR <ACTION> [OF <lista_kolumn>] ON <nazwa_tabeli> REFERENCING NEW AS <synonim> OLD AS <synonim> PARENT AS <synonim> FOR EACH ROW DECLARE <deklaracja_zmiennych> BEGIN <kod_wyzwalacza> EXCEPTION <obsluga_wyjatkow> END <nazwa_wyzwalacza>; / Przykłady ● ● ● Z before i insert oraz NEW Z after i update oraz OLD Z „wszystkim” oraz INSERTING, UPDATING, DELETING Wyzwalacz złożony CREATE TRIGGER <nazwa_wyzwalacza> FOR <typ_zdazenia> ON <nazwa_tabeli> COMPOUND TRIGGER BEFORE STATEMENT IS BEGIN ... END BEFORE STATEMENT; BEFORE EACH ROW IS BEGIN ... END BEFORE EACH ROW; AFTER STATEMENT IS BEGIN ... END AFTER STATEMENT; AFTER EACH ROW IS BEGIN ... END AFTER EACH ROW; END <nazwa_wyzwalacza>; / Wyzwalacze DDL Ten rodzaj wyzwalaczy pozwala na przechwycenie większości zdarzeń z poziomy DDL takich jak chociażby CREATE, DROP, ALTER, REANAME … Dodatkowe informacje o obiektach systemie jesteśmy w stanie uzyskać za pomocą specjalnych funkcji (bardziej przypominających atrybuty) w obrębie bloku wykonywanego zdarzenia. Tego typu wyzwalacze mogą mieć cele ● ● ● – – Rejestracja/logowanie istotnych elementów w bazie (np.. nadawanie uprawnień) Tuning bazy danych, równoważenie obciążenia, ... Funkcje dla wyzwalaczy DDL ● ● ● ● ● ● ORA_CLIENT_IP_ADDRESS ORA_DATABASE_NAME ORA_DICT_OBJ_NAME ORA_DICT_OBJ_TYPE ORA_SYSEVENT Jest to niewielka liczba ze wszystkich dostępnych funkcji dla wyzwalaczy jakie zawiera w sobie Oracle, po resztę odsyłam do dokumentacji. Składnia wyzwalacza DDL CREATE OR REPLACE TRIGGER <nazwa_wyzwalacza> <BEFORE | AFTER> <akcja> ON <SCHEMA | DATABASE> DECLARE <deklaracja_zmiennych> BEGIN <kod_wyzwalacza> EXCEPTION <obsluga_wyjatkow> END <nazwa_wyzwalacza>; / Przykład ● Z CREATE Widoki obiektów Przykłady Czego nie było (+/-)