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 (+/-)