• Increase font size
  • Default font size
  • Decrease font size

Procedury przechowywane w bazach danych oraz procedury wyzwalania

Rafał Janus, Marcin Mazur, Piort Faj

Artykuł ten poświęcony jest zagadnienieom związanych z procedurami przechowywania w bazach danych oraz procedurom wyzwalania. Duża część materiału ujętego w artykule jest specyfikacją dla serwerów PostgreSQL. Serwery te umożliwiają projektantom, programistom bądź administratorom tychże serwerów na tworzenie rozszerzeń w postaci funkcji napisanych przykładowo w języku C, bądź Java i załadowanie ich w momencie uruchamiania się serwera. Funkcje, rozszerzenia napisane w taki sposób przez programistę bądź administratora serwera PostgreSQL są wykonywane przez serwer a nie przez aplikację kliencką i są zapisywane wewnątrz samej bazy danych. Rozwiązanie takie daje możliwość zwiększenia funkcjonalności.

Do rozszerzenia  funkcjonalności serwera PostgreSQL-a, są wykorzystywane języki programowania takie jak przykładowo C, do budowy funkcji umożliwiających rozszerzenie możliwości serwera. Przykładem takim może być np. funkcja zamieniająca dowolny ciąg znaków na inny, licząca silnię czy dowolną inną rzecz. Język taki jak C pozwala na korzystanie ze zmiennych, wyrażeń warunkowych czy pętli, są one nieocenionym narzędziem pracy każdego zawodowego administratora bazy danych.

Procedury przechowywania w bazach danych mogą zostać wykonane automatycznie przez serwer PostgreSQL przy odpowiednio powstałych warunkach. Przykładem może być próba usunięcia wiersza tabeli w celu wymuszenia integralności odwołań. W tym przypadku zostanie wywołana procedura, która usunie wiersze w innych tabelach lub nie dopuści do usunięcia wiersza. Takim automatycznym działaniem określa się nazwę procedury wyzwalania. Procedury wyzwalania  wykonywane są bez wiedzy użytkownika korzystającego z zawartości bazy danych.

Stosowanie procedur wyzwalania ma na celu:

* możliwość zawansowania śledzenia użytkowników,
* ochrony przed nieprawidłowymi transakcjami,
* wymuszenia więzów referencyjnych,
* wymuszenia złożonych reguł biznesowych
* wymuszenia złożonych polityk bezpieczeństwa,
* zapewnienia przezroczystego zapisu wydarzeń,
* wypełnienia atrybutów wartościami domyślnymi,
* modyfikacji złożonych perspektyw,
* śledzenia wydarzeń systemowych,

Przykładem zastosowania procedury wyzwalania może być procedura sprawdzająca, czy płaca przyznana asystentowi nie przekracza widełek płacowych dla danej grupy zarobkowej. Procedura ta pozwala w sposób łatwy i szybki określić poprawność wynagrodzenia.  (*procedura poniżej nie robi tego co napisano powyżej. Ta procedura ustawia identyfikator pracownika w oparciu o kolejny numer z sekwencji w przypadku kiedy pole tego identyfikatora jest wprowadzane do bazy puste. Michał Widera)

 CREATE OR REPLACE TRIGGER trig_id_prac
 BEFORE INSERT ON pracownicy
 FOR EACH ROW
 BEGIN
 IF (:NEW.id_prac IS NULL) THEN
 SELECT seq_pracownik.NEXTVAL
 INTO :NEW.id_prac FROM DUAL;
 END IF;
 END;


Artykuł przedstawia  również następujące zagadnienia uzupełniające takie jak: typ wyzwalaczy na poleceniach, DML i DDL, wyzwalacze typu INSTEAD OF. Są to zagadnienia związane z procedurami wyzwalania w bazach danych.

Typy procedur wyzwalanych:

* BEFORE - uruchamiane przed wykonaniem polecenia INSERT, UPDATE, DELETE,
* AFTER - uruchamiane po wykonaniu polecenia INSERT, UPDATE, DELETE,
* INSTEAD OF . uruchamiane zamiast polecenia INSERT, UPDATE, DELETE,
* systemowe . uruchamiane po zajściu określonego zdarzenia w schemacie lub bazie danych,

Polecenia SQL dzieli się zwykle na grupy:

1. Polecenia DDL (Data Definition Language) umożliwiające wykonywanie następujących zadań:

* tworzenie (create) zmiana (alter) i usuwanie (drop) obiektów schematu,
* przyznawanie (grant)  i odbieranie (revoke) uprawnień i ról,
* analizowanie informacji dotyczącej tabel (tables), indeksów (indexes), klastrów (clusters),
* ustalanie warunków audytu,
* dodawanie komentarzy do słownika danych (data dictionary),

2. Polecenia DML służą do operacji na danych - do ich umieszczania w bazie, kasowania, przeglądania, zmiany. Najważniejsze polecenia z tego zbioru to:

* SELECT - pobranie z bazy danych,
* INSERT - umieszczenie danych w bazie,
* UPDATE - zmiana danych,
* DELETE - usunięcie danych z bazy.

Uwaga: polecenia alter, drop, create wymagają wyłączności w dostępie do poddanych ich działaniu obiektów; wymóg ten nie dotyczy poleceń analyze, audit, comment, grant, revoke. Oprócz wymienionych, do poleceń DDL należą noaudit, rename, truncate. Każda transakcja przed i po poleceniu DDL jest przez Oracle zatwierdzana (commit) Ă˘Â€Ë˜ polecenia DML (Data Manipulation Language) dotyczą tworzenia zapytań i operowania danymi, nie powodują zatwierdzenia bieżącej transakcji poleceniami. DML są to: delete, explain plan, insert, lock table, select, update.

Procedura wyzwalana INSTEAD OF.


Ta procedura wyzwalana pozwala na zapewnianie modyfikowalności złożonych perspektyw.

Zablokowanie i odblokowanie procedury wyzwalanej.

* Każda procedura wyzwalana może być w jednym  z dwóch stanów:
** odblokowania,
** zablokowania
* Do zablokowania (odblokowania) pojedynczej procedurywyzwalanej służy polecenie:

 ALTER TRIGGER nazwa DISABLE |ENABLE|; 


* Wszystkie  procedury wyzwalane związane  z  daną relacją  można zablokować (odblokować) pojedynczym poleceniem:

 ALTER TABLE nazwa_relacji DISABLE 
 |ENABLE| ALLTRIGGERS;

 

Usuwanie procedur wyzwalania:

 

 DROP TRIGGER nazwa


Informacje dotyczące procedur  wyzwalanych zdefiniowanych przez  użytkownika można  wyświetlić korzystając  z perspektywy systemowej o  nazwie USER_TRIGGER.

Źródła
# Bazy danych i PostgreSQL. Od podstaw - Richard Stones, Neil Matthew (wyd. Helion  2002r)
# Procedury wyzwalane Instytut Informatyki Politechniki Poznańskiej, Bartosz Bębel
# www.math.uni.lodz.pl/~wlodarm/pliki/sql/~procedury wyzwalan  slajdy.pdf

 

Naszą witrynę przegląda teraz 2 gości