Silvia Chiusano, Paolo Garza 1

Documenti analoghi
Tecnologia delle Basi di Dati Esercitazione #4 Definizione dei trigger in Oracle

Le Basi di Dati Attive

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

Trigger. Basi di dati attive. Trigger: regole che specificano azioni attivate automaticamente dal DBMS al verificarsi di determinati eventi

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

Operazioni scatenanti. Nozione ed uso. Sintassi. Esempio

Basi di Dati: Corso di laboratorio

Triggers. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica Università di Roma La Sapienza

IMPIEGATO(Nome, Salario, DipNum) DIPARTIMENTO (DipNum, NomeManager)

Elena Baralis 2007 Politecnico di Torino 1

Basi di dati attive. Una base di dati è ATTIVA quando consente la definizione e la gestione di regole di produzione (regole attive o trigger).

Basi di Dati e Sistemi Informativi. Asserzioni, Viste e Trigger Basi di dati Attive

Il linguaggio SQL: trigger

Triggers Esercitazione 1

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

Basi di dati attive 1

Viene richiesto di MIN CARD(S,E) = 1 UPDATE DELETE MAX CARD(S,E) = 3 INSERT UPDATE

Laboratorio di Basi di Dati

SQL: Definizione e Manipolazione di Relazioni. Capitolo 2

Cap. 5 Basi di dati attive

Manuale SQL. Manuale SQL - 1 -

Tabelle esempio: Impiegato/Dipartimento

SQL: DDL, VI, Aggiornamenti e Viste

Introduzione. i trigger rendono reattivo il comportamento del sistema alle sollecitazioni esterne.

Corso di Basi di Dati

Interrogazioni nidificate

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

σ data 15/12/2013 data 20/12/2014

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Interrogazioni nidificate

Linee guida per la programmazione di transazioni in PL/SQL

Tecnologia delle Basi di Dati

DATABASE PER IL WEB. Programmazione Web 1

Oracle PL/SQL. Motivazioni

ESEMPIO DI TRIGGER PER IL CONTROLLO DELLE PROPRIETÀ COPERTURA DI UNA GERARCHIA (ARGOMENTO SVOLTO IN CLASSE IL 25 MAGGIO 2011)

Processo di ottimizzazione. Ottimizzatore di Oracle. Execution plan. Esempio. Albero di esecuzione. Ottimizzatore di Oracle Dicembre 2002

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Progettazione di Sistemi Informatici

2011 Politecnico di Torino 1

Laboratorio di Basi di Dati

PARTITIONING PARTITIONING. 27/11/08 /home/scotty/enrico/corso web/finale/architettura/partit page 1

Corso di Basi di Dati

Capitolo 5. Soluzione: Soluzione in C:

Sistemi di gestione di basi di dati

Lezione 8. Metadati, Viste e Trigger

Capitolo 7. Esercizio 7.1

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

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

LABORATORIO di INFORMATICA

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

SQL PER LA DEFINIZIONE DI BASI DI DATI

Esercitazione 4: Trigger in DB2

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

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

PROVA SCRITTA DI TECNOLOGIA DATABASE 14/12/2005 Corso di Laurea Specialistica in Ingegneria Informatica - NOD PROF.

Unità D3. Sicurezza nelle basi di dati. Sicurezza e concorrenza nelle basi di dati. Controllo accesso. Protezione e integrità dati

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

PROVA SCRITTA DI TECNOLOGIA DATABASE 02/12/2004 Corso di Laurea Specialistica in Ingegneria Informatica - NOD PROF.

SQL - Structured Query Language

Pag Politecnico di Torino 1

Soluzione esercitazione 01

Basi di Dati: Corso di laboratorio

Alessandra Raffaetà. Esercizio: Cinema

S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

SQL - Sottointerrogazioni

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

Breve guida a PostgreSQL (versione per Windows) Gianluca Cima

Il linguaggio SQL: le viste

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

VARIABILI, ASSEGNAZIONE, DECISIONI

Laboratorio di Basi di Dati SQL avanzato

Connessione con MySQL

Basi di dati (3) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. Argomento: DML (1.

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

Basi di dati. Linguaggio SQL: fondamenti - Introduzione. Elena Baralis 2007 Politecnico di Torino 1 D B M G 2 D B M G D B M G 4 D B M G 6

Il linguaggio SQL: query innestate

Esercitazione: Interrogazioni SQL

Interrogazioni$e$il$valore$NULL$

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Data warehouse in Oracle

Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003

Librerie digitali. Uso di XML per memorizzare i metadati. Descrizione generale. XML per memorizzare i metadati. Motivi dell uso di XML

Set rstmiatabella = Currentdb.OpenRecordset( nometabella, dbopendynaset)

ESERCIZI SQL. Esercizio 1

Laboratorio di Progettazione Web

SQL Esercitazione (database e tabelle) Ing. Cosimo Orlacchio

Caratteristiche dei linguaggi per Database

DUGI, DB2 User Group Italia. i Trigger INSTEAD OF ; SELECT FROM INSERT, UPDATE, MERGE, DELETE con Colonne INCLUDE

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

PROGETTAZIONE DI DATABASE Linguaggio SQL

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

OBIETTIVI DELL'ESERCITAZIONE

Fondamenti di Teoria delle Basi di Dati

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

SQL (STRUCTURED QUERY LANGUAGE)

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

MS Access Un DBMS relazionale per Windows?

Basi di Dati: Corso di laboratorio

Transcript:

Creazione di un trigger Sviluppo ed utilizzo dei trigger in Oracle Silvia Chiusano Paolo Garza CREATE TRIGGER nome_trigger modo evento [OR evento] ON tabella [REFERENCING referenza] [] [WHEN (predicato SQL)] blocco PLSQL; Politecnico di Torino 1 2 Modo AFTER Il corpo (blocco PLSQL) del trigger viene eseguito dopo il comando SQL che ha attivato il trigger BEFORE Il corpo del trigger viene eseguito prima del comando SQL che ha attivato il trigger Evento Il trigger può essere attivato dai seguenti eventi Inserimento di tuple in una tabella: INSERT Cancellazione di tuple da una tabella: DELETE Aggiornamento dei campi di una tabella UPDATE UPDATE of nome_campo Posso associare il trigger a più eventi (elenco di eventi separati da OR) 3 4 WHEN Determina se il trigger è di tipo ROW TRIGGER STATEMENT TRIGGER (default) ROW TRIGGER Il trigger viene attivato per ogni tupla che soddisfa il trigger, relativamente al comando SQL eseguito STATEMENT TRIGGER Il trigger viene attivato una sola volta per il comando SQL cha soddisfa l evento del trigger (non per le singole tuple) 5 Per i row trigger è possibile indicare ulteriori condizioni di attivazione (vincoli di tupla) Il predicato SQL viene valutato per ogni tupla Non può essere usato per gli statement trigger 6 Silvia Chiusano, Paolo Garza 1

Blocco PLSQL Sequenza di operazioni da svolgere in seguito all attivazione del trigger [DECLARE dichiarazioni ] codice PLSQL [EXCEPTION gestione eccezioni ] Accesso alle tuple della tabella associata al trigger Nel corpo di un row trigger si può accedere ai vecchi e nuovi valori delle tuple interessate dal trigger OLD.nome_campo : permette di accedere al vecchio valore del campo nome_campo NEW.nome_campo : permette di accedere al nuovo valore del campo nome_campo OLD.nome_campo è impostato a NULL in caso dell attivazione causata da una INSERT NEW.nome_campo è impostato a NULL in caso dell attivazione causata da una DELETE 7 8 Uso di NEW e OLD Gestione rollback Nella WHEN del trigger NEW.nome_campo OLD.nome_campo Nel codice PLSQL (corpo del trigger) :NEW. nome_campo :OLD. nome_campo Per operare il rollback dell operazione attuale richiamare la procedura raise_application_error(-codice_errore, messaggio_errore); Viene lanciato un errore e quindi in automatico viene operato il rollback dove: codice_errore: codice d errore ritornato all applicazione chiamante messaggio_errore: messaggio di errore ritornato all applicazione chiamante (stringa fra apici singoli) 9 10 Mutating table Cancellazione di un trigger La tabella sul quale il trigger viene scatenato viene chiamata: MUTATING TABLE NON SI PUO USARE in alcun modo tale tabella all interno del corpo del trigger stesso (neppure in lettura) Si puo esclusivamente accedere ai valori della tupla in esame tramite gli operatori NEW e OLD DROP TRIGGER nome_trigger; 11 12 Silvia Chiusano, Paolo Garza 2

Si considerino le seguenti tabelle: EMP_LOGR(LOG_DATE,ACTION); EMP_LOGS(LOG_DATE,ACTION); Sono definiti due trigger sulla tabella EMP CREATE TRIGGER up_stat_emp AFTER UPDATE ON emp INSERT INTO emp_logs (log_date,action) VALUES (SYSDATE, UPDATE EMP ); 13 14 CREATE TRIGGER up_row_emp AFTER UPDATE ON emp INSERT INTO emp_logr (log_date,action) VALUES (SYSDATE, UPDATE EMP ); La tabella EMP contiene 3 record Viene eseguita la seguente operazione SQL: UPDATE emp SET sal=sal+100; Entrambi i trigger vengono attivati L esecuzione dall operazione SQL comporta: la modifica del salario dei 3 record presenti in emp l inserimento di 1 record nella tabella emp_logs (esecuzione del primo trigger) l inserimento di 3 record nella tabella emp_logr (esecuzione del secondo trigger) 15 16 Si considerino le tabelle: SALGRADE(GRADE, LOSAL, HISAL); Scrivere un trigger che non consenta l inserimento di una nuova tupla nella tabella EMP se il salario e inferiore al valore minimo assunto dal campo LOSAL nella tabella SALGRADE Se si tenta di effettuare un inserimento nella tabella EMP usando una salario (SAL) inferiore a quello consentito fare il rollback dell operazione 17 18 Silvia Chiusano, Paolo Garza 3

CREATE TRIGGER INS_EMP AFTER INSERT ON emp DECLARE minsal NUMBER(7,2); SELECT MIN(LOSAL) INTO minsal FROM SALGRADE; IF (:NEW.SAL < minsal) THEN raise_application_error(-20500, Salario troppo basso per :NEW.ENAME); END IF; Esempio 3 Si consideri la base di dati EMP e la base di dati COPY_CLERK contenente una copia delle tuple di emp relative agli impiegati per cui JOB= CLERK EMP ( EMPNO, ENAME, JOB, SAL) COPY_CLERK (EMPNO, ENAME, SAL) 19 20 Esempio 3 - Consistenza tra una base di dati e le repliche Per garantire la consistenza tra la base di dati EMP e la sua replica COPY_CLERK, e necessario propagare a COPY_CLERK ogni inserimento, cancellazione, aggiornamento eseguito su EMP, nel caso in cui le tuple modificate abbiano JOB= CLERK. Tale propagazione puo essere eseguita mediante un trigger. 21 Esempio 3 - INSERT Il seguente trigger inserisce in COPY_CLERK le tuple che sono inserite in EMP, se in tali tuple job= CLERK create trigger INS_ROW after insert on EMP when (NEW.JOB = 'CLERK') insert into COPY_CLERK values (:NEW.EMPNO, :NEW.ENAME, :NEW.SAL); 22 Esempio 3 - DELETE Esempio 3 - UPDATE Il seguente trigger cancella da COPY_CLERK le tuple che sono cancellate da EMP, se in tali tuple job= CLERK Il seguente trigger aggiorna COPY_CLERK se vengono fatti degli aggiornamenti nella tabella EMP, se OLD.job= CLERK o se NEW.job= CLERK create trigger DEL_ROW after delete on EMP when (OLD.JOB = 'CLERK') delete from COPY_CLERK where EMPNO=:OLD.EMPNO; 23 create trigger UP_ROW after UPDATE OF empno, ename, job, sal ON EMP if ( (:NEW.JOB = 'CLERK') and (:OLD.JOB!='CLERK')) then INSERT into copy_clerk values (:NEW.empno, :NEW.ename, :NEW.sal); 24 Silvia Chiusano, Paolo Garza 4

Esempio 3 - UPDATE (2) if ( (:OLD.JOB = 'CLERK') and (:NEW.JOB!='CLERK')) then DELETE from copy_clerk where empno=:old.empno; if ((:OLD.JOB = 'CLERK') and (:NEW.JOB='CLERK')) then UPDATE copy_clerk set ename=:new.ename, empno=:new.empno, sal=:new.sal where empno=:old.empno; 25 Si considerino le tabelle: AUMENTI_SALARIO(EMPNO,DATA,AUMENTO); 26 Scrivere un trigger che non permetta di aumentare il salario agli impiegati che hanno gia avuto almeno 3 aumenti di stipendio. Nella tabella AUMENTI_SALARIO sono memorizzate le informazioni sulle date in cui ogni impiegato ha ricevuto degli aumenti di stipendio Se si cerca di aumentare lo stipendio (campo SAL della tabella EMP) di un impiegato che ha gia avuto almeno 3 aumenti fare il rollback dell operazione 27 CREATE TRIGGER UP_EMP AFTER UPDATE OF SAL ON emp WHEN (NEW.sal>OLD.sal) DECLARE naumenti NUMBER; SELECT COUNT(*) INTO naumenti FROM AUMENTI_SALARIO WHERE empno=:new.empno; IF ( naumenti>2) THEN raise_application_error(-20500, L impiegato :NEW.ename ha ricevuto troppi aumenti ); END IF; 28 Silvia Chiusano, Paolo Garza 5