Linee guida per la programmazione di transazioni in PL/SQL



Похожие документы
Capitolo 7. Esercizio 7.1

Tecnologia di un Database Server (centralizzato) Introduzione generale

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:

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

Lezione 8. Metadati, Viste e Trigger

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

Oracle PL/SQL. Motivazioni

Linguaggio SQL: costrutti avanzati

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

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

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Che cos è un DBMS? Capitolo 1. Perché usare un DBMS? DBMS. Descrizioni dei dati nei DBMS. Modelli di dati

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

FUNZIONI. Dichiarazione: Definizione:

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

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

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

APPENDICE. Procedure in SQL (1)

Il linguaggio SQL: viste e tabelle derivate

Sistema di Gestione di Basi di Dati DataBase Management System DBMS

Vincoli di Integrità

L architettura di un DBMS

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

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

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

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

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

Cap. 5 Basi di dati attive

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

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

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

Introduzione. Dicom in Oracle 11g: gestione e vantaggi

PL/SQL Uso di un linguaggio procedurale per un database

Express Import system

Implementing a new ADT based on the HL7 version 3 RIM. Esempio

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

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

Il linguaggio SQL: transazioni

Il linguaggio SQL: query innestate

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

Oracle9i. Sono le dieci di sera, state impazzendo sul database. Indietro nel tempo con. Flashback Query

Vincoli di Integrità

La Metodologia adottata nel Corso

Basi di Dati. S Q L Lezione 5

ROUTINE E PROGRAMMAZIONE

Dispensa di database Access

Definizione di domini

Introduzione a MySQL

Basi di dati I. Esercitazione proposta

Secondo Compitino di Basi di Dati

Elenchi Intrastat. Indice degli argomenti. Premessa. Operazioni preliminari. Inserimento manuale dei movimenti e presentazione

2104 volume III Programmazione

1 CARICAMENTO LOTTI ED ESISTENZE AD INIZIO ESERCIZIO

Istruzioni DML di SQL

Software per Helpdesk

Case Study: Distribuzione logistica per Azienda di prodotti a largo consumo

Linguaggi di programmazione

STRUMENTI E TECNICHE LEZIONE 4: FACEBOOK PROFILI VS PAGINE

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

8 Tecniche di recovery

Architetture distribuite

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

Silvia Chiusano, Paolo Garza 1

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

PROGRAMMA DI CLASSE 5AI

Workland CRM. Workland CRM Rel /11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX

Transazioni in SQL. Nicola Vitacolonna Corso di Basi di Dati Università degli Studi di Udine 4 dicembre 2013

Gestione della Memoria

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

GUIDA ALL'ACQUISTO DI TRADUZIONI

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

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

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

GESTIONE FATTURE (VELINE)

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

Esecuzione concorrente di transazioni

Prova Scritta di Basi di Dati

FIRESHOP.NET. Gestione completa degli ordini e degli impegni. Rev

Mon Ami 3000 Produzione interna/esterna Gestione della produzione interna/esterna

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Il servizio di registrazione contabile. che consente di azzerare i tempi di registrazione delle fatture e dei relativi movimenti contabili

Транскрипт:

Linee guida per la programmazione di transazioni in PL/SQL Giuseppe Berio Giuseppe Berio DI - Unito 1

Esempio La transazione deve registrare l evasione di un ordine, rappresentato su più tabelle specializzate per tipologia di prodotto, usando una tabella che contiene per ogni prodotto la quantità disponibile a magazzino. Naturalmente, ogni ordine non contiene necessariamente tutti i prodotti commercializzati dall azienda. Ogni ordine può essere evaso parzialmente, cioè se non vi è sufficiente quantità di un prodotto ma vi è sufficiente quantità di un altro, l ordine viene evaso solo relativamente a questo ultimo prodotto. Giuseppe Berio DI - Unito 2

Vi sono due tipi di prodotto Magazzino Cod_Prodotto Esempio Quantità Quantità >= 0, Un prodotto richiesto potrebbe non esistere, Un prodotto richiesto potrebbe avere quantità NULL Ordini1 Cod_Ordine Ordini2 Cod_Ordine Quantità Stato Quantità Stato Ordini distinti per tipologia di merce, Quantità >= 0 Giuseppe Berio DI - Unito 3

Declare quantità1 number; out, x1, x2 varchar2; errore_interno, quantitàindefinita, quantitàinsufficiente Exception; Begin select quantità into quantità1 from Magazzino where cod_prodotto=x1; Ifquantità1 IS NULL then RAISE quantitàindefinita; end if; when quantitàindefinita then quantità1:=0; when others then out:= errore ; If out= errore then RAISE errore_interno; end if; Commit; Exception When errore_interno then rollback; When others then rollback; End; Normale eccezione causata dalla possibilità che quantità sia NULL: non è necessario fare un rollback Giuseppe Berio DI - Unito 4

Declare quantità1, quantità2 number; out, x1, x2 varchar2; errore_interno, quantitàinsufficiente quantitàindefinita, Exception; Begin select quantità into quantità1 from Ordini1 where cod_ordine=x1; If quantità1 IS NULL then RAISE quantitàindefinita; end if; when no_data_found then quantità1:=0; when quantitàindefinita then quantità1:=0; when others then out:= errore ; If out= errore then RAISE errore_interno; end if; Commit; Exception When errore_interno then rollback; When others then rollback; Non è necessario fare un rollback Eccezioni per cui è necessario rimandare la gestione al livello di annidamento inferiore : in tal caso si decide per un rollback End; Giuseppe Berio DI - Unito 5

Commento Trasparente 4 selectquantità into quantità1 frommagazzino where cod_prodotto=x1; Trasparente 5 select quantità into quantitàord1 from Ordini1 where cod_ordine=x1; Ifquantità1<= quantitàord1 then RAISE quantitàinsufficiente; end if; Il test non ha senso se non si controlla la concorrenza Giuseppe Berio DI - Unito 6

Declare Begin. Savepoint S1; Evasione parziale di Ordini Update Magazzino set quantità= quantità-quantità1 where cod_prodotto=y1; when others then out:= impossibilevadere ; If out = impossibilevadere then rollback to S1; end if; Savepoint S2; Update Magazzino set quantità= quantità-quantità2 where cod_prodotto=y2; when others then out := impossibilevadere ; If out = impossibilevadere then rollback to S2; end if; Commit; End; Il vincolo Quantità>=0 è initially immediate, immediate (default di Oracle) Eccezioni per cui è necessario fare un rollback parziale in quanto si permette di evadere parzialmente un ordine Giuseppe Berio DI - Unito 7

Confusione delle Eccezioni Select quantità into quantità1 from Ordini1 where cod_ordine=x1; Update Ordini1 set stato= evaso where cod_ordine=x1; Update Magazzino set quantità=quantità-quantità1 where cod_prodotto=y1; When no_data_found then quantità1:=0; When others then quantità1:=0; Necessario usare sqlcode oppure la tracciatura delle eccezioni in when then. La soluzione potrebbe dare luogo ad una confusione delle eccezioni: No_data_found e others potrebbero gestire (allo stesso modo) eccezioni distinte causate da più istruzioni Giuseppe Berio DI - Unito 8

Ordine delle Istruzioni Select quantità into quantità1 from Ordini1 where cod_ordine=x1; Update Magazzino set quantità=quantità-quantità1 where cod_prodotto=y1; Update Ordini1 set stato= evaso where cod_ordine=x1; When no_data_found thenquantità1:=0; When others thenquantità1:=0; La soluzione indicata dovrebbe essere indipendente dall ordine delle istruzioni che operano sulla basedati e che sono indipendenti Giuseppe Berio DI - Unito 9

Vincoli Immediati e Differiti Vincolo immediato e differibile: default Create table A (a number(10) check(a>0) initially immediate deferrable); Vincolo differito e differibile Create table A (a number(10) check(a>0) initially deferred deferrable); Giuseppe Berio DI - Unito 10

Evasione Ordini tutto o niente Modifica del precedente esercizio La richieste è ora: o un ordine è evaso completamente oppure non è evaso per niente In altre parole, se un ordine prevede prodotti distinti, tutti questi prodotti devono essere disponibili nel magazzino nelle quantità richieste Giuseppe Berio DI - Unito 11

Declare Begin Evasione Ordini tutto o niente I Update Magazzino set quantità= quantità-quantità1 where cod_prodotto=y1; when others then out:= impossibilevadere ; If out= impossibilevadere then RAISE quantitàinsuffciente end if; Update Magazzino set quantità= quantità-quantità2 where cod_prodotto=y2; when others then out := impossibilevadere ; If out= impossibilevadere then RAISE quantitàinsuffciente end if; Commit; Exception When quantitàinsuffciente then rollback; When others then rollback; End; Eccezioni per cui è necessario rimandare la gestione al livello di annidamento inferiore : in tal caso si decide per un rollback Giuseppe Berio DI - Unito 12

Declare Begin Commit; Exception Evasione Ordini tutto o niente II Update Magazzino set quantità= quantità-quantità1 where cod_prodotto=y1; When others then Update Magazzino set quantità= quantità-quantità2 where cod_prodotto=y2; When others then Il vincolo Quantità>=0 è initially deferred, deferrable. Ciò causa tuttavia alcune Per altre eccezioni è necessario rimandare la gestione al livello di annidamento inferiore : in tal caso si decide per un rollback When others then rollback; Giuseppe Berio DI - Unito inefficienze 13 End;

Declare Begin Exception Evasione parziale Ordini: uso di più commit Select quantità into quantità1 from Ordini1 where cod_ordine=x1; Update Ordini1 set stato= evaso where cod_ordine=x1; UpdateMagazzino set quantità=quantità-quantità1 where cod_prodotto=y1; Commit; When no_data_found then quantità1:=0; When others then quantità1:=0; Select quantità into quantità2 from Ordini2 where cod_ordine=x2; Update Ordini2 set stato= evaso where cod_ordine=x2; UpdateMagazzino set quantità= quantità-quantità2 where cod_prodotto=y2; Commit; When no_data_found then quantità2:=0; When others then quantità2:=0; Il vincolo Quantità>=0 è initially deferred, deferrable In questo caso i livelli di annidamento superiore agiscono da transazioni: in tal caso, i vincoli sono dichiarati come deferred e quindi controllati al primo commit. When others then rollback; Giuseppe Berio DI - Unito 14 End;

Vincoli e Codice dei Programmi Vincoli: parte dello schema della base dati Programmi: servono per programmare le transazioni E possibile far dipendere i programmi dai vincoli, anche se: I programmi diventano dipendenti dai vincoli; cosa accade se questi variano? I programmi risultano più efficienti, limitano il ricorso ad una gestione della concorrenza, ma diventano limitatamente modularizzabili; cosa accade se si usano procedure? Giuseppe Berio DI - Unito 15