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



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

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

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

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

Lezione 8. Metadati, Viste e Trigger

Oracle PL/SQL. Motivazioni

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Capitolo 7. Esercizio 7.1

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

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

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

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

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

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

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

Ricorsione in SQL-99. Introduzione. Idea di base

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

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

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

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

Operazioni sui database

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

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

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere capitolo 7 di Garcia- Molina et al. Lucidi derivati da quelli di Jeffrey D.

GERARCHIE RICORSIVE - SQL SERVER 2008

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi

DBMS (Data Base Management System)

Funzioni in C. Violetta Lonati

DBMS ed Applicazioni Motivazioni

2104 volume III Programmazione

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

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

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

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke

SQL PER LA DEFINIZIONE DI BASI DI DATI

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Basi di Dati Attive. Basi di Dati Attive

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

User Tools: DataBase Manager

Basi di dati (6) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: T-SQL (1.

Istruzioni DML di SQL

CONCETTO DI ANNIDAMENTO

Data Warehousing (DW)

L architettura di un DBMS

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

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

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

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

Introduzione alla teoria dei database relazionali. Come progettare un database

Basi di Dati: Corso di laboratorio

Il linguaggio SQL: query innestate

Capitolo 13. Interrogare una base di dati

Linee guida per la programmazione di transazioni in PL/SQL

Corso di Basi di Dati. Linguaggi per basi di dati. Linguaggi per basi di dati. Linguaggi per basi di dati: Algebra Relazionale

Informatica per le discipline umanistiche 2 lezione 10

Lezioni di Laboratorio sui Data Base

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

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

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

I file di dati. Unità didattica D1 1

Lezione 9. Applicazioni tradizionali

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

Dati relazionali e XML

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

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

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

Volumi di riferimento

Il linguaggio SQL: viste e tabelle derivate

APPENDICE. Procedure in SQL (1)

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

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

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

Basi di Dati. S Q L Lezione 5

MEZZI CodM Tipo Targa AnnoI Assicurato

SQL. Alcune note sulla definizione dei dati

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

PL/SQL Uso di un linguaggio procedurale per un database

Basi di dati (7) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: stored procedure (1.

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

Cap. 5 Basi di dati attive

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

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

Dispensa di database Access

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

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

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

Architettura MVC-2: i JavaBeans

PL/SQL e PLpgSQL. Audiolezione 28b. Necessità. Soluzioni. Embedded SQL. Alfio Ferrara - Stefano Montanelli. Estensioni procedurali di SQL

Struttura logica di un programma

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Una metodologia di progettazione di applicazioni web centrate sui dati

PHP e MySQL. Guida scaricata da

Transazioni - Parte 1

Introduzione al MATLAB c Parte 2

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

ROUTINE E PROGRAMMAZIONE

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Transcript:

Versione dei trigger e PSM di Oracle Lucidi derivati da quelli di Jeffrey D Ullman Oracle usa una variante di SQL/PSM che si chiama non consente solo di creare e memorizzare procedure e funzioni, ma puo essere eseguito dalla interfaccia generica per le query, come una istruzione SQL I triggers sono una parte di 1 2 Differenze nei triggers In confronto con i trigger SQL standard, quelli di Oracle hanno le seguenti differenze: 1 L azione e una istruzione 2 Sono automaticamente disponibile riferimenti alle tuple nuove/vecchie 3 Ci sono vincoli forti sulle azioni previste per evitare catene infinite di attivazioni di triggers Ordine degli elementi dei triggers di Oracle 1 CREATE OR REPLACE TRIGGER 2 Evento, ad es AFTER INSERT 3 FOR EACH ROW, se richiesto 4 Condizione 5 Azione 6 Un punto e la parola Questa fa si che il trigger sia installato nel database 3 4

Tuple vecchie/nuove Esempio: BeerTrig Invece di una clausola REFERENCING, Oracle assume che alle nuove tuple si faccia riferimento con new e a quelle vecchie con old Inoltre, per tiggers a livello di istruzione: newtable e oldtable Nelle azioni, ma non nelle condizioni, bisogna far precedere new, ecc, da un due punti 5 Si ricordi il trigger BeerTrig, che inserisce un nome di birra in Beers quando una tupla era inserita in Sells con una birra che non era menzionata in Beers Ecco la versione Oracle dello stesso trigger 6 BeerTrig nell SQL di Oracle Un altro esempio CREATE OR REPLACE TRIGGER BeerTrig AFTER INSERT ON Sells FOR EACH ROW WHEN (newbeer NOT IN (SELECT name FROM Beers)) INSERT INTO BEERS(name) VALUES(:newbeer); Necessario per memorizzare il trigger come un elemento del database Si noti che new e capito Inoltre, i due punti sono usati solo nell azione 7 Si ricordi PriceTrig, che memorizza nella relazione Ripoffbars(bar) il nome di ogni bar che aumenta il prezzo di una qualunque birra di piu di 1$ Ecco la versione di Oracle 8

PriceTrig in Oracle CREATE OR REPLACE TRIGGER PriceTrig AFTER UPDATE OF price ON Sells FOR EACH ROW WHEN (newprice > oldprice + 100) INSERT INTO RipoffBars VALUES(:newbar); 9 Limitazioni di Oracle sulle relazioni coinvolte Ogni trigger riguarda una relazione R, menzionata nell evento Lo standard SQL standard non mette vincoli su quali relazioni, incluso R, possono essere modificate nell azione Come risultato, sequenze infinite di eventi scatenati sono possibili 10 Esempio: triggering infinito Limitazione di Oracle Sia R(x) una relazione unaria che e un insieme di interi E facile scrivere un trigger con evento INSERT ON R, che, come azione, inserisce i +1 se i era l intero che ha scatenato il trigger Risulta in una sequenza senza fine di inserimenti Oracle e molto conservativo riguardo alle relazioni che possono essere modificate quando l evento e su R R sicuramente non puo essere il soggetto di una modifica nell azione Ma e piu sottile: ogni relazione che e collegata ad R da una catena di vincoli di chiave esterna non puo essere cambiata anch essa 11 12

Esempio: catene di chiavi esterne Si supponga che Ra sia una chiave esterna, che fa riferimento a Sb Inoltre, Tc e una chiave esterna che fa riferimento a Sb Allora in un trigger sulla relazione R, ne T ne S possono essere modificate In aggiunta alla stored procedures, si possono scrivere istruzioni che assomigliano al corpo di una procedura, ma sono eseguite solo una volta, come una istruzione SQL scritta nell interfaccia generica Oracle chiama l interfaccia generica sqlplus Il plus e in realta il 13 14 Forma delle istruzioni Forma di una procedura DECLARE <dichiarazioni> <istruzioni> La sezione DECLARE e opzionale CREATE OR REPLACE PROCEDURE <nome> (<argomenti>) AS <dichiarazioni opzionali> <istruzioni > Richiesto per memorizzare la procedura nel database Si noti AS e richiesto qui 15 16

Dichiarazioni e assegnamenti La parola DECLARE non deve apparire davanti a ogni dichiarazione locale Si usa semplicemente il nome della variabile e il suo tipo Non is usa la parola SET negli assegnamenti e := e usato al posto di = Esempio: x := y; 17 Parametri delle procedure Ci sono diverse differenze nella forma degli argomenti e delle variabili locali in rispetto allo standard SQL/PSM: 1 L ordine e nome-modo-tipo, non modonome-tipo 2 INOUT e sostituito da IN OUT in 3 Diversi nuovi tipi 18 Tipi In aggiunta ai tipi SQL, NUMBER puo essere usato per indicare un INT or un REAL Ci si puo riferire al tipo di un attributo x della relazione R con Rx%TYPE Utile per evitare discordanze nel tipo Inoltre, R%ROWTYPE e una tupla i cui componenti hanno il tipo degli attributi di R 19 Esempio: JoeMenu Si ricordi la procedure JoeMenu(b,p) che aggiunge la birra b al prezzo p alle birre vendute da Joe s Bar (nella relazione Sells) Ecco la versione 20

Procedura JoeMenu in CREATE OR REPLACE PROCEDURE JoeMenu ( b IN Sellsbeer%TYPE, p IN Sellsprice%TYPE ) AS INSERT INTO Sells VALUES ( Joe s Bar, b, p); Istruzioni di branching in Come IF in SQL/PSM, ma: Si usa ELSIF al posto di ELSEIF Ad es: IF THEN ELSIF ELSIF ELSE END IF; 21 22 Cicli in LOOP END LOOP come in SQL/PSM Al posto di LEAVE, usa EXIT WHEN <condizione> e quando la condizione e che il cursore c non ha trovato tuple, possiamo scrivere c%notfound come condizione Cursori in La forma di una dichiarazione di cursore e : CURSOR <nome> IS <query>; Per prelevare tuple dal cursore c, si usa: FETCH c INTO <variabile(i)>; 23 24

Esempio: JoeIncrease () in Si ricordi che JoeIncrease () manda un cursore attraverso la porzione di Sells riferita a Joe s-bar, e aumenta di 1$ il prezzo di ogni birra venduta da Joe s Bar, se quel prezzo era inizialmente meno di 3$ Esempio: dichiarazioni di JoeIncrease () CREATE OR REPLACE PROCEDURE JoeIncrease() AS thebeer Sellsbeer%TYPE; theprice Sellsprice%TYPE; CURSOR c IS SELECT beer, price FROM Sells WHERE bar = Joe s Bar ; 25 26 Esempio: corpo di JoeIncrease OPEN c; LOOP Il modo di di interrompere un FETCH c INTO thebeer, theprice; ciclo di un cursore EXIT WHEN c%notfound; IF theprice < 300 THEN UPDATE Sells SET price = theprice + 100; WHERE bar = Joe s Bar AND beer = thebeer; END IF; END LOOP; CLOSE c; Si noti che questa e una clausola SET in una UPDATE, non un assegnamento usa := per gli assegnamenti 27 Variabile con valore tupla consente di avere una variabile x con un tipo tupla x R%ROWTYPE assegna a x il tipo delle tuple di R R puo essere una relazione o un cursore xa fornisce il valore dell attributo a nella tupla x 28

Esempio: tipo tupla Ecco le dichiarazioni di JoeIncrease(), usando una variabile bp il cui tipo e coppia birraprezzo, come restituito dal cursore c CREATE OR REPLACE PROCEDURE IncreaseJoe() AS CURSOR c IS SELECT beer, price FROM Sells WHERE bar = Joe s Bar ; bp c%rowtype; 29 Corpo di JoeIncrease usando bp OPEN c; LOOP FETCH c INTO bp; EXIT WHEN c%notfound; IF bpprice < 300 THEN UPDATE Sells SET price = bpprice + 100; WHERE bar = Joe s Bar AND beer =bpbeer; END IF; END LOOP; CLOSE c; I componenti di bp sono ottenuti con un punto e il nome dell attributo 30 Esempio Create Or Replace Procedure Debit(ClientAccount char(5),withdrawal integer) as OldAmount integer; NewAmount integer; Threshold integer; begin select Amount, Overdraft into OldAmount, Threshold from BankAccount where AccountNo = ClientAccount; NewAmount := OldAmount - WithDrawal; Esempio if NewAmount > Threshold then update BankAccount set Amount = NewAmount where AccountNo = ClientAccount; else insert into OverDraftExceeded values(clientaccount,withdrawal,sysdate); end if; end; 31 32