Cap. 5 Basi di dati attive



Documenti analoghi
Cap. 7 -Trigger e loro uso

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Basi di dati attive 1

Le Basi di Dati Attive

Le Basi di Dati Attive

Basi di dati attive 1

Capitolo 7. Esercizio 7.1

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Vincoli e Triggers. Vincoli. Tipo di vincoli. Chiavi esterne

Basi di dati attive. Paolo Atzeni. Basi di dati attive

Basi di Dati Attive. Basi di Dati Attive

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Definizione di domini

Nozione ed uso. Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso:

Basi di dati attive. Basi di dati attive. Struttura di base dei trigger. Evento-Condizione-Azione. Sintassi SQL:1999 dei trigger

Gestione delle tabelle

Lezione 8. Metadati, Viste e Trigger

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

Basi di Dati: Corso di laboratorio

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

SQL PER LA DEFINIZIONE DI BASI DI DATI

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

DBMS (Data Base Management System)

CONCETTO DI ANNIDAMENTO

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

Linee guida per la programmazione di transazioni in PL/SQL

Introduzione al corso

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Il linguaggio SQL: query innestate

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Informatica per le discipline umanistiche 2 lezione 10

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

Vincoli di Integrità

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

BASE DI DATI: sicurezza. Informatica febbraio ASA

Capitolo 13. Interrogare una base di dati

Basi di Dati. S Q L Lezione 5

SQL - Funzioni di gruppo

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Le Basi di Dati. Le Basi di Dati

Tecnologia di un Database Server (centralizzato) Introduzione generale

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Introduzione. Coordinazione Distribuita. Ordinamento degli eventi. Realizzazione di. Mutua Esclusione Distribuita (DME)

Organizzazione degli archivi

Introduzione ai database relazionali

Vincoli di integrità

Al giorno d oggi, i sistemi per la gestione di database

Lezione V. Aula Multimediale - sabato 29/03/2008

IL DAT A B A S E DI ALGE B R A N D O

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Gestione del workflow

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

MAX, SUM, AVG, COUNT)

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

BASI DI DATI per la gestione dell informazione. Angelo Chianese Vincenzo Moscato Antonio Picariello Lucio Sansone

H1 Hrms Gestione eventi/scadenze automatiche

(anno accademico )

MODELLO RELAZIONALE. Introduzione

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Progettazione di Basi di Dati

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

2104 volume III Programmazione

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

SQL - Tipi di dato Il linguaggio SQL

Ricorsione in SQL-99. Introduzione. Idea di base

Secondo Compitino di Basi di Dati

Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL. Simona Rotolo

Laboratorio di Basi di Dati e Web

Corso di Informatica (Basi di Dati)

Linguaggio SQL: costrutti avanzati

Pag. 1. Gestione delle transazioni. Linguaggio SQL: costrutti avanzati. Esempio applicativo. Gestione delle transazioni. Prelievo. Esempio applicativo

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Volumi di riferimento

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

Il Modello Relazionale

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Istruzioni DML di SQL

Tali regole vengono attivate in modo automatico al verificarsi di specifici eventi sulla. eseguono azioni sulla base di dati stessa.

Vincoli di Integrità

2. Simulazione discreta: approcci alla simulazione

Dati relazionali e XML

LA REALIZZAZIONE DI APPLICAZIONI. Quattro parti: Gestione dati. Business rules. Logica applicativa. Interfaccia utente. Molte possibili architetture

Macchine a stati finiti G. MARSELLA UNIVERSITÀ DEL SALENTO

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Transcript:

SOMMARIO 2 Cap. 5 Basi di dati attive Introduzione. 3 Trigger in SQL:999.. Esecuzione di un solo trigger... 4 Esecuzione di più trigger... Esempio di esecuzione 23 Progettazione delle regole attive.... 32 Applicazioni delle basi di dati attive.. 39 3 Comportamento attivo delle BD 4 INTRODUZIONE Si realizza disponendo di un componente del DBMS per la gestione di regole che scattano su determinati Eventi transazionali, in maniera Condizionata, sviluppando una prescritta Azione regole E-C-A dette anche trigger. I DBMS, in tal caso, hanno comportamento reattivo (in contrasto con passivo ): eseguono cioè nelle transazioni utente anche le regole (trigger). Le regole mettono a fattor comune parte dell applicazione che diventa così condivisa con tutte le applicazioni: si parla di indipendenza della conoscenza in quanto la conoscenza reattiva viene sottratta alle applicazioni e codificata nei trigger. Tutti i DBMS commerciali hanno i trigger (standardizzati da SQL:03).

Il paradigma E-C-A 5 Trigger 6 Evento una richiesta di modifica dello stato della base di dati: INSERT, DELETE, UPDATE Quando avviene l evento, il trigger viene attivato Condizione Un predicato che identifica le situazioni in cui è necessaria l applicazione del trigger Quando si valuta la condizione il trigger viene considerato Azione Un generico comando di modifica o una stored procedure Quando si elabora l azione il trigger viene eseguito definiti con istruzioni DDL (create trigger) basati sul paradigma ECA: evento: modifica dei dati, specificata con insert, delete, update condizione (opzionale): predicato SQL azione: sequenza di istruzioni SQL (o estensioni, ad esempio PL/SQL in Oracle) ogni trigger fa riferimento ad una tabella (target) e risponde ad eventi relativi a tale tabella i valori di tale tabella vengono congelati prima e dopo l evento nelle due tabelle di transizione old table e new table. Trigger: modo e granularità Modo di esecuzione after: il trigger è considerato ed eseguito dopo l applicazione sulla base dati dell azione che lo ha attivato before: il trigger è considerato ed eseguito prima della applicazione alla base dati dell azione che lo ha attivato Granularità di tupla (row - level): attivazione per ogni tupla identificata con old [row] e new [row] - della tabella target coinvolta nell'operazione di operazione (statement - level): una sola attivazione identificata con old [table] e new [table] per ogni istruzione SQL, con riferimento a tutte le ennuple della tabella target coinvolte ( set-oriented ) 7 Trigger, esempio: dichiarazione create trigger Reorder after update of QtyAvbl on WAREHOUSE for each row when (new.qtyavbl < new.qtylimit) declare X number; begin select count(*) into X from PENDINGORDERS where Part = new.part; if X = 0 then insert into PENDINGORDERS values(new.part,new.qtyreord,sysdate) end if; end; 8

Trigger, esempio: tabella target e transazioni attivanti 9 Trigger, esempio: esecuzione 0 La esecuzione di T causa un esecuzione del trigger Reorder che porta nella tabella PENDINGORDERS la tupla (,00,<oggi>); Viene eseguita la transazione T: update WAREHOUSE set QtyAvbl = QtyAvbl - 70 where Part = E successivamente T2: update WAREHOUSE set QtyAvbl = QtyAvbl - 60 where Part <= 3 La successiva esecuzione di T2 causa l esecuzione del trigger Reorder per tre volte con soddisfacimento della condizione di scatto per le parti e 3. L azione relativa alla parte non ha effetto perchè select count(*) into X from PENDINGORDERS where Part = new.part; valuta X= poiché è già presente la parte considerata; L azione relativa alla parte 3 porta nella tabella PENDINGORDERS la nuova tupla (3,,<oggi>) 2 Sintassi SQL:03 dei trigger TRIGGER IN SQL:999 Lo standard propone una sintassi simile a quella offerta da IBM DB2; ogni trigger è caratterizzato da: Nome del trigger nome della tabella che viene monitorata modo di esecuzione (BEFORE o AFTER) l evento monitorato (INSERT, DELETE o UPDATE) granularità (statement-level o row-level) nomi e alias per tabelle di transizione e righe di transizione eventuale condizione l azione il timestamp di creazione

Sintassi SQL:03 dei trigger 3 4 create trigger NomeTrigger {before after} { insert delete update [of Colonne] } on Tabella [referencing {[old table [as] AliasTabellaOld] [new table [as] AliasTabellaNew] } {[old [row] [as] NomeTuplaOld] [new [row] [as] NomeTuplaNew] }] [for each { row statement }] [when Condizione] ComandiSQL ESECUZIONE DI UN SOLO TRIGGER Esecuzione di un singolo trigger 5 Granularità degli eventi 6 Modo di esecuzione: BEFORE Il trigger viene considerato ed eventualmente eseguito prima che venga applicata sulla base di dati l azione che lo ha attivato Di norma viene utilizzata questa modalità quando si vuole verificare la correttezza di una modifica, prima che la stessa venga applicata AFTER Il trigger viene considerato ed eventualmente eseguito dopo che è stata applicata sulla base di dati l azione che lo ha attivato È il modo più comune, adatto a quasi tutte le applicazioni È più semplice da utilizzare correttamente Modo statement level (modo di default) Il trigger viene considerato ed eventualmente eseguito una volta sola per ogni comando che lo ha attivato, indipendentemente dal numero di tuple modificate È il modo più vicino all approccio tradizionale dei comandi SQL, che sono di norma set-oriented Modo row-level (opzione for each row) Il trigger viene considerato ed eventualmente eseguito una volta per ciascuna tupla che è stata modificata dal comando Consente di scrivere i trigger in modo più semplice Può essere meno efficiente

Clausola referencing Il formato dipende dalla granularità Per il modo row-level, si hanno due variabili di transizione (transition variables) old e new, che rappresentano rispettivamente il valore precedente e successivo alla modifica della tupla che si sta valutando Per il modo statement-level, si hanno due tabelle di transizione (transition tables) old table e new table, che contengono rispettivamente il valore vecchio e nuovo di tutte le tuple modificate Le variabili old e old table non sono utilizzabili in trigger il cui evento è insert Le variabili new e new table non sono utilizzabili in trigger il cui evento è delete Le variabili e le tabelle di transizione sono importanti per realizzare i trigger in modo efficiente 7 Esempio di trigger row-level create trigger MonitoraConti after update on CONTI for each row when (old.nomeconto = new.nomeconto and new.totale > old.totale) insert values (new.nomeconto,new.totaleold.totale) into SINGOLIVERSAMENTI 8 Esempio di trigger statementlevel create trigger ArchiviaFattureCanc after delete on FATTURE referencing old table as SETOLDFATTURE insert into FATTURECANCELLATE (select * from SETOLDFATTURE) 9 ESECUZIONE DI PIÙ TRIGGER

Conflitti tra trigger Se vi sono più trigger associati allo stesso evento, SQL:999 prescrive questa politica di gestione: Vengono eseguiti i trigger BEFORE statement-level Vengono eseguiti i trigger BEFORE row-level Si applica la modifica e si verificano i vincoli di integrità definiti sulla base di dati Vengono eseguiti i trigger AFTER row-level Vengono eseguiti i trigger AFTER statement-level Se vi sono più trigger della stessa categoria: l ordine di esecuzione viene scelto dal sistema in un modo che dipende dall implementazione. 2 Modello di esecuzione SQL:999 prevede che i trigger vengano gestiti in un: Trigger Execution Context (TEC) L esecuzione dell azione di un trigger può produrre eventi che fanno scattare altri trigger, che dovranno essere valutati in un nuovo TEC interno In ogni istante possono esserci più TEC per una transazione, uno dentro l altro, ma uno solo può essere attivo Per i trigger row-level il TEC tiene conto di quali tuple sono già state considerate e quali sono da considerare Si ha quindi una struttura a stack: TEC0 -> TEC ->... -> TECn Quando un trigger ha considerato tutti gli eventi, il TEC si chiude e si passa al trigger successivo È un modello complicato, ma preciso e relativamente semplice da implementare 22 23 Gestione dei salari 24 IMPIEGATO ESEMPIO DI ESECUZIONE Matricola 5 52 Nome Rossi Verdi Bianchi Salario 56.000.000 NDip NProg 0 DIPARTIMENTO NroDip MatricolaMGR PROGETTO NroProg 0 Obiettivo NO NO

Trigger T: Bonus Evento: update di Obiettivo in Progetto Condizione: Obiettivo = SI Azione: incrementa del 0% il salario degli impiegati coinvolti nel progetto CREATE TRIGGER Bonus AFTER UPDATE OF Obiettivo ON Progetto WHEN NEW.Obiettivo = SI update Impiegato set Salario = Salario*.0 where NProg = NEW.NroProg; 25 Trigger T2: ControllaIncremento Evento: update di Salario in Impiegato Condizione: nuovo salario maggiore di quello del manager Azione: decrementa il salario rendendolo uguale a quello del manager CREATE TRIGGER ControllaIncremento AFTER UPDATE OF Salario ON Impiegato DECLARE X number; SELECT Salario into X FROM Impiegato JOIN Dipartimento ON Impiegato.Matricola = Dipartimento.MatricolaMGR WHERE Dipartimento.NroDip= NEW.NDip; IF NEW.Salario > X update Impiegato set Salario = X where Matricola = NEW.Matricola; ENDIF; 26 Trigger T3: ControllaDecremento 27 Attivazione di T 28 Evento: update di Salario in Impiegato Condizione: decremento maggiore del 3% Azione: decrementa il salario del solo 3% CREATE TRIGGER ControllaDecremento AFTER UPDATE OF Salario ON Impiegato WHEN (NEW.Salario < OLD.Salario * 0.97) update Impiegato set Salario=OLD.Salario*0.97 where Matricola = NEW.Matricola; Update Progetto set Obiettivo = SI where NroProg = 0 PROGETTO Evento: update dell attributo NroProg Obiettivo Obiettivo in Progetto 0 SI Condizione: vera NO Azione: IMPIEGATO 5 52 si incrementa del 0% il salario di Verdi Matricola Nome Rossi Verdi Bianchi Salario 6.600.000 Ndipart NProg 0

Attivazione di T2 29 Attivazione di T3 30 Evento: update dell attributo salario in Impiegato Evento: Condizione: Azione: 5 52 update di Salario in Impiegato vera (il salario dell impiegato Verdi supera quello del manager Rossi) si modifica il salario di Verdi rendendolo uguale a quello del manager Rossi Matricola Nome Rossi Verdi Bianchi Salario.000 Ndipart Si attiva nuovamente T2 - condizione è falsa Si attiva T3 NProg 0 Condizione: vera (il salario di Verdi è stato decrementato per più del 3%) Azione: si decrementa il salario di Verdi del solo 3% Matricola 5 52 Nome Rossi Verdi Bianchi Salario 59.752.000 Ndipart Si attiva nuovamente T3 - condizione è falsa Si attiva T2 condizione vera NProg 0 Attivazione di T2 3 32 Matricola 5 52 Nome Rossi Verdi Bianchi Salario.000 Ndipart Attivazione di T3 NProg La condizione del trigger è falsa Il salario è stato decrementato per meno del 3% L attivazione dei trigger ha raggiunto lo stato di terminazione 0 PROGETTAZIONE DELLE REGOLE ATTIVE

Proprietà dei trigger 33 Analisi di terminazione 34 3 proprietà classiche Terminazione Per qualunque stato iniziale e qualunque sequenza di modifiche, i trigger producono uno stato finale (non vi sono cicli infiniti di attivazione) Confluenza I trigger terminano e producono un unico stato finale, indipendente dall ordine in cui i trigger vengono eseguiti La proprietà è significativa solo quando il sistema presenta del nondeterminismo nella scelta dei trigger da eseguire Determinismo delle osservazioni I trigger sono confluenti e in più producono la stessa sequenza di messaggi La proprietà più importante è di gran lunga la terminazione Si usa il il grafo di attivazione (triggering graph) Un nodo per ogni trigger Un arco da un nodo t i a un nodo t j se l esecuzione dell azione di t i può attivare il trigger t j (si può fare con una semplice analisi sintattica) Se il grafo è aciclico, si ha la garanzia che il sistema è terminante non vi possono essere sequenze infinite di trigger Se il grafo ha dei cicli, c è la possibilità che il sistema sia non-terminante (ma non è detto) Esempio con due trigger 35 Triggering graph 36 T: create trigger AggiustaContributi after update of Stipendio on Impiegato referencing new table as NuovoImp update Impiegato set Contributi = Stipendio * 0.8 where Matr in (select Matr from NuovoImp) AggiustaContributi T ControllaSogliaBudget T2 T2: create trigger ControllaSogliaBudget after update on Impiegato when 000 < (select sum(stipendio+contributi) from Impiegato) update Impiegato set Stipendio = 0.9*Stipendio Vi sono 2 cicli. Il sistema è però terminante. Per renderlo non terminante è sufficiente invertire il verso del confronto nella condizione del trigger T2

Grafo di Terminazione per i trigger di gestione dei salari 37 Tecniche di disegno dei trigger 38 Bonus T T2 T3 ControllaIncremento ControllaDecremento Il grafo è ciclico, ma l esecuzione ripetuta dei trigger porta comunque allo stato di quiescenza. Proposte per il progetto su piccola scala e su scala più ampia per il progetto su piccola scala, conviene sfruttare gli strumenti di analisi disponibili (triggering graph e altri) per il progetto su scala più grande, conviene far riferimento a tecniche e metodologie apposite La modularizzazione è una tecnica che prevede di organizzare i trigger in moduli destinati a un obiettivo specifico Se ciascun modulo realizza correttamente il proprio obiettivo e se l interferenza con gli altri moduli è innocua (da dimostrare in modi diversi), si ha la garanzia che il sistema è corretto 39 Introduzione 40 APPLICAZIONI DELLE BASI DI DATI ATTIVE Regole interne alla base di dati Trigger generati dal sistema e non visibili all utente Principali funzionalità: Gestione dei vincoli di integrità, la computazione di dati derivati, la gestione dei dati replicati; Altre funzionalità: Gestione di versioni, privatezza, sicurezza, logging delle azioni, registrazione degli eventi, Regole esterne (o regole aziendali) Esprimono conoscenza di tipo applicativo

. GESTIONE INTEGRITÀ REFERENZIALE Si consideri il seguente schema di base dati: IMPIEGATI ( Matricola, Nome, Salario, NDip: DIPARTIMENTI) DIPARTIMENTI(NroDip, Manager: IMPIEGATI) 4 Integrità referenziale: possibili violazioni Es: CREATE TABLE IMPIEGATI (...... FOREIGN KEY(NDip) REFERENCES DIPARTIMENTI(NroDip) ON DELETE SET NULL,...... ); 42 e le strategie di riparazione per le violazioni dei vincoli di integrità referenziale tra NDip di IMPIEGATI e NroDip di DIPARTIMENTI Le operazioni che possono violare questo vincolo sono: INSERT in IMPIEGATI UPDATE di IMPIEGATI.NDip UPDATE di DIPARTIMENTI.NroDip DELETE in DIPARTIMENTI Il vincolo è espresso come predicato nella parte condizione INSERT (UPDATE) nella tabella IMPIEGATI Evento: inserimento (modifica) in IMPIEGATI Condizione: il nuovo valore di Ndip non è tra quelli contenuti nella tabella DIPARTIMENTI Azione: si inibisce l inserimento (modifica), segnalando un errore CREATE TRIGGER ControllaDipImpiegato BEFORE INSERT ON IMPIEGATI WHEN (not exists select * from DIPARTIMENTI where NroDip = NEW.NDip) raise_application_error(-000, Dipartimento non valido ); ( Per la update di NDip in IMPIEGATI il trigger cambia solo nella parte evento: BEFORE UPDATE OF Ndip ON IMPIEGATI) 43 Evento: Condizione: Azione: UPDATE nella tabella DIPARTIMENTI modifica dell attributo NroDip in DIPARTIMENTI il vecchio valore di NroDip è tra quelli contenuti nella tabella IMPIEGATI si modifica anche Ndip in IMPIEGATI CREATE TRIGGER ControllaModificaDipartimento AFTER UPDATE OF NroDip ON DIPARTIMENTI WHEN(exists select * from IMPIEGATI where NDip = OLD.NroDip) update IMPIEGATI set NDip = NEW.Nrodip where NDip = OLD.NroDip; 44

DELETE nella tabella DIPARTIMENTI 45 2. GESTIONE DEI DATI REPLICATI 46 Evento: Condizione: cancellazione in DIPARTIMENTI il valore di NroDip che si intende cancellare è tra quelli contenuti nella tabella IMPIEGATI Azione: si pongono a Null i valori Ndip di IMPIEGATI pari al valore NroDip di DIPARTIMENTI che si intende cancellare CREATE TRIGGER ControllaCancDipartimento AFTER DELETE ON DIPARTIMENTI WHEN(exists select * from IMPIEGATI where NDip = OLD.NroDip) UPDATE IMPIEGATI SET Ndip=NULL WHERE Ndip = OLD.NroDip; Il Replication Manager cattura, mediante trigger, le modifiche da applicare alla COPIA2 nelle tabelle DELTA- PLUS e DELTA-MINUS in modo trasparente alle applicazioni COPIA COPIA 2 modifiche CAPTURE APPLY DELTA-PLUS DELTA-MINUS Trigger di replicazione 47 3. CONTROLLO DEGLI ACCESSI 48 CREATE TRIGGER CAPTURE-INS AFTER INSERT ON PRIMARY INSERT INTO DELTA-PLUS VALUES (NEW.*) CREATE TRIGGER CAPTURE-DEL AFTER DELETE ON PRIMARY INSERT INTO DELTA-MINUS VALUES (OLD.*) CREATE TRIGGER CAPTURE-UPD AFTER UPDATE ON PRIMARY INSERT INTO DELTA-PLUS VALUES (NEW.*) INSERT INTO DELTA-MINUS VALUES (OLD.*) END I trigger possono essere utilizzati per rinforzare il controllo sugli accessi E conveniente definire solo quei trigger che corrispondono a condizioni che non possono essere verificate direttamente dal DBMS Uso del BEFORE per i seguenti vantaggi: Il controllo dell accesso è eseguito prima che l evento del trigger sia eseguito Il controllo dell accesso è eseguito una sola volta e non per ogni tupla su cui si verifica l evento del trigger

Trigger InibisciModificaSalario CREATE TRIGGER InibisciModificaSalario BEFORE INSERT ON Impiegato DECLARE non_nel_weekend EXCEPTION; non_in_oredilavoro EXCEPTION; /*se non nel weekend*/ IF (to_char(sysdate, 'dy') = 'SAT' OR to_char(sysdate, 'dy') = 'SUN') THEN RAISE non_nel_weekend; END IF; /* se al di fuori dell orario di lavoro(8-8) */ IF (to_char(sysdate, 'HH24') < 8 OR to_char(sysdate, 'HH24') > 8) THEN RAISE non_in_oredilavoro; END IF; 49 Trigger InibisciModificaSalario (cont.) EXCEPTION WHEN non_nel_weekend THEN raise_application_error(-324, non e possibile modificare la tabella impiegato durante il weekend'); WHEN non_in_oredilavoro THEN raise_application_error(-325,' non e possibile modificare la tabella impiegato al di fuori dell orario di lavoro');