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



Documenti analoghi
Operazioni scatenanti. Nozione ed uso. Sintassi. Esempio

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

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

Basi di Dati. S Q L Lezione 5

Lezione 8. Metadati, Viste e Trigger

Capitolo 7. Esercizio 7.1

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

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

Cap. 5 Basi di dati attive

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

Linee guida per la programmazione di transazioni in PL/SQL

Istruzioni DML di SQL

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

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

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

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

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

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

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

2104 volume III Programmazione

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

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

MySQL Database Management System

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

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

Cap. 7 -Trigger e loro uso

Basi di dati e sistemi informativi I

Silvia Chiusano, Paolo Garza 1

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

Oracle PL/SQL. Motivazioni

Basi di dati (8) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: trigger e cursori (1.

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

MySQL Database Management System

Le Basi di Dati Attive

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

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

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Basi di Dati Attive. Basi di Dati Attive

DBMS (Data Base Management System)

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

Basi di Dati: Corso di laboratorio

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Introduzione a MySQL

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

GERARCHIE RICORSIVE - SQL SERVER 2008

ROUTINE E PROGRAMMAZIONE

Volumi di riferimento

PROGRAMMA DI CLASSE 5AI

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Definizione di domini

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

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

Informatica per le discipline umanistiche 2 lezione 10

Il linguaggio SQL: viste e tabelle derivate

Le Basi di Dati Attive

Informazioni generali sul corso

Stored Procedures. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

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

Vincoli di Integrità

Basi di Dati: Corso di laboratorio

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Gestione Liste TIM E ultime novità per i TELESALE

MEZZI CodM Tipo Targa AnnoI Assicurato

MANUALE EDICOLA 04.05

SQL. Alcune note sulla definizione dei dati

Come trattare il risultato di un comando SQL (relazioni) che

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

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

PHP e MySQL. Scripting server-side per accesso a DB MySQL

MySQL Command Line Client: operazioni fondamentali

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Sistema di Gestione di Basi di Dati DataBase Management System DBMS

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Prova Scritta di Modelli dei Dati di Nuova Generazione

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

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

Vincoli di Integrità

Una metodologia di progettazione di applicazioni web centrate sui dati

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

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

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

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

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

PHP e Structured Query Language

Il linguaggio SQL: query innestate

CONCETTO DI ANNIDAMENTO

cliente... nuovo cliente trasloco

Concetti fondamentali dei database database Cos'è un database Principali database

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

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

Soluzione DDL ed Algebra Relazionale

CONFIGURAZIONE E GESTIONE DEI DATABASE (rev. 1.1)

Transcript:

Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: Gestione di vincoli di integrità: Per fallimento Per modifica Auditing: Sicurezza Statistiche Valori derivati memorizzati Facilitare lo sviluppo di applicazioni tramite RAD Altro

Operazioni scatenanti select... from... where insert into tabella [ ( [ colonna /,]* ) ] values ( [expr /, ]* ) insert into tabella [ ( [ colonna /,]* ) ] subquery update table [nome] set [ column = expr /, ]* [where condizione] delete [ from ] tabella where condizione

Sintassi Sintassi: create [or replace] trigger nome {before after} [ {delete insert update [of [column /,]* } /or]* on tabella [referencing { old as nome new as nome }*] [for each row] [when (condition)] blocco Referencing e when solo se for each row; per default, la vecchia riga è :old e la nuova è :new nel blocco, old e new nella condizione

Esempio Siano prenotazioni e agenzie due tabelle legate dall attributo agenzia chiave esterna in prenotazioni. prenotazioni nomeagenzia agenzie Creo una directory ese5bdl e vi copio i file in ~ghelli/bdl07/esercizi/ese5/ Mi collego al server Oracle che ho scelto e compilo nell ordine: create.sql ese5.sql trigger.sql

Esempio Modifico menuagenzie.html sostituendo YYY con il mio nome utente di Oracle Copio menuagenzie.html nella directory ~/public_html Inserisco dati accedendo la pagina, http://www.cli.di.unipi.it/mioaccountweb/menuagenz ie.html

trigger.sql (1/3) Il trigger alla prima prenotazione crea l agenzia, per le successive ne aggiorna il totale di spese e di prenotazioni

trigger.sql (2/3) create or replace trigger t1 before insert on prenotazioni for each row declare conta number; begin select count(*) into conta from agenzie where nomeagenzia = :new.agenzia;

trigger.sql (3/3) if (conta = 0) then insert into agenzie values (:new.agenzia,1,:new.spesa); else update agenzie set numprenotazioni = numprenotazioni + 1, spesatot = spesatot + :new.spesa where nomeagenzia = :new.agenzia;

trigger2.sql (1/3) Il trigger estende trigger.sql per controllare che ogni agenzia non abbia più di tre prenotazioni (limite massimo consentito), nel caso solleva un eccezione

trigger2.sql (2/3) create or replace package p_ese5 as troppeprenotazioni exception; end p_ese5; create or replace trigger t1 before insert on prenotazioni for each row declare conta number; prenota number; begin select count(*) into conta from agenzie where nomeagenzia = :new.agenzia;

trigger2.sql (3/3) else begin select numprenotazioni into prenota from agenzie where nomeagenzia = :new.agenzia; if (prenota = 3) then raise p_ese4.troppeprenotazioni; end if; update agenzie set numprenotazioni = numprenotazioni + 1, spesatot = spesatot + :new.spesa where nomeagenzia = :new.agenzia; end;

Eccezione e trigger create or replace package p_ese5 as procedure prenota( ); troppeprenotazioni exception; end p_ese5; create or replace package body p_ese5 as procedure prenota( ) begin insert into prenotazioni values ( ) exception when p_ese5.troppeprenotazioni then do something end prenota; end p_ese5;

Esercizi Realizzare una procedura per la cancellazione delle prenotazioni Realizzare un trigger che si occupi di eliminare le agenzie dal database quando non esistono più prenotazioni associate Realizzare una pagina di immissione dati più ricca, che consenta di selezionare il nome dell agenzia tra quelle esistenti nel database

Limitazione Limitazione: non è possibile modificare la tabella che ha fatto partire il trigger o la chiave di una tabella coinvolta nel comando, se il trigger è for each row (insert into fa eccezione)

TRIGGER ILLECITO create or replace trigger trigdelstat after delete on prenota for each row declare conta number; begin select count(*) into conta from prenota where login = :old.login; if conta = 0 then delete from utenti where login = :old.login; else update utenti set oretotali = oretotali - 1 where login = :old.login; end if; end;

VERSIONE ACCETTATA create or replace trigger trigdelrow after delete on prenota for each row begin update utenti set oretotali = oretotali - 1 where login = :old.login; end;

VERSIONE ALTERNATIVA create or replace trigger tridel after delete on prenota begin delete utenti u where not exists (select * from prenota where login = u.login); end;