APPENDICE. Procedure in SQL (1)



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

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

Tecnologia di un Database Server (centralizzato) Introduzione generale

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

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

Oracle PL/SQL. Motivazioni

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

SQL e linguaggi di programmazione

Il linguaggio SQL: transazioni

Linguaggio SQL: costrutti avanzati

Volumi di riferimento

SQL e applicazioni. Capitolo 8. SQL e linguaggi di programmazione. Applicazioni ed SQL: architettura. Una difficoltà importante.

Dispensa di database Access

Esecuzione concorrente di transazioni

2104 volume III Programmazione

Lezione 9. Applicazioni tradizionali

19. LA PROGRAMMAZIONE LATO SERVER

Capitolo 13. Interrogare una base di dati

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

BENEDETTI ALESSANDRO Matricola : PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2

L architettura di un DBMS

Funzioni in C. Violetta Lonati

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

Definizione di domini

Informatica per le discipline umanistiche 2 lezione 10

Il database management system Access

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

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

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

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

Capitolo 7. Esercizio 7.1

Lezione 8. Metadati, Viste e Trigger

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

Linee guida per la programmazione di transazioni in PL/SQL

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Lezione 1. Introduzione e Modellazione Concettuale

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Le query. Lezione 6 a cura di Maria Novella Mosciatti

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

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

DBMS (Data Base Management System)

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

Laboratorio di Basi di Dati e Web

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Progettazione di Basi di Dati

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

ROUTINE E PROGRAMMAZIONE

Introduzione JDBC interfaccia java.sql driver caricare i driver

Editor vi. Editor vi

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

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

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Introduzione ai database relazionali

Database e reti. Piero Gallo Pasquale Sirsi

HORIZON SQL CONFIGURAZIONE DI RETE

I file di dati. Unità didattica D1 1

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

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

Allocazione dinamica della memoria - riepilogo

Access. P a r t e p r i m a

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

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Vincoli di Integrità

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

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

1. BASI DI DATI: GENERALITÀ

Intel One Boot Flash Update Utility Guida dell utente

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

TRANSAZIONI DISTRIBUITE TRANSAZIONI

Dati relazionali e XML

Il Modello Relazionale

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

Esercizio 2. Client e server comunicano attraverso socket TCP

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

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

CONCETTO DI ANNIDAMENTO

dall argomento argomento della malloc()

Tratti dal cap. 9 di: Atzeni, Ceri, Paraboschi, Torlone Basi di Dati II edizione, 1999, McGraw-Hill

DB - Cenni sulla gestione delle transazioni

Mac Application Manager 1.3 (SOLO PER TIGER)

OSSIF WEB. Manuale query builder

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Migrazione del servizio di posta elettronica. istruzioni per gli amministratori delle mailing-list

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Basi di Dati prof. A. Longheu. 5 Progettazione fisica

Per utilizzare il sistema VCP il programmatore deve inserire una porzione di codice di VCP nella sua applicazione.

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

Programmazione Java Avanzata Spring - JDBC

ISTRUZIONI AGGIORNAMENTO TARIFFARIO 2006

Transcript:

APPENDICE Procedure in SQL Transazioni in SQL Embedded SQL Remote Procedure Call Appendice 1 Procedure in SQL (1) Standard SQL2 permette di definire procedure, associate a singoli comandi SQL, memorizzate all interno del database (vanno a far parte dello schema) Una procedura associa un nome ad un comando e permette il passaggio di parametri Una procedura può essere richiamata dall interno di un programma specificando il valore dei parametri I DBMS permettono in genere la definizione di procedure in modo più sofisticato di quanto previsto dallo standard SQL2 Appendice 2 1

Procedure in SQL (2) esempio di procedura standard SQL-2 procedure Assegnacitta (:Dip char(20), :Citta char (20)) update Dipartimento set Città = :Citta where Nome = :Dip; Questa procedura può essere richiamata da un programma nomecitta = Firenze ; nomedip = sistemi ; Assegnacitta ( :nomedip, :nomecitta) Appendice 3 Procedure in SQL (3) estensioni allo standard SQL-2 Esempi di estensioni sono Sequenze di comandi Strutture di controllo (if-then-else) Definizione di variabili locali Ogni sistema da delle possibilità in questo ambito, che però si diversificano anche nella sintassi Alcuni sistemi commerciali forniscono una estensione di SQL che è un vero e proprio linguaggio di programmazione con cui è possibile scrivere intere applicazioni ORACLE: linguaggio PL/SQL Appendice 4 2

TRANSAZIONI IN SQL (1) Comandi generali per le transazioni BEGIN TRANSACTION END TRANSACTION COMMIT WORK ROLLBACK WORK I comandi begin transaction e end transaction racchiudono le istruzioni che compongono il corpo della transazione Il comando commit work segnala al sistema che gli effetti sul database devono essere resi permanenti deve essere eseguita uma operazione di commit Il comando rollback work segnala al sistema che gli effetti delle istruzioni eseguite fino a quel momento devono essere annullati deve essere eseguita una operazione di abort La sintassi SQL non prevede tutti questi comandi espliciti Appendice 5 TRANSAZIONI IN SQL (2) Non esistono i comandi begin transaction e end transaction Esistono invece commit e rollback Una istruzione SQL è implicitamente la prima istruzione di una transazione (transazione corrente) se non esiste già una transazione corrente I comandi commit e rollback segnalano anche la fine della transazione Ogni istruzione SQL che segue un commit o un rollback è la prima istruzione di una nuova transazione Il comando set transaction serve ad eventualmente definire le caratteristiche della transazione corrente Appendice 6 3

TRANSAZIONI IN SQL (3) comando COMMIT Operazioni eseguite a seguito di un comando COMMIT Viene eseguito un CLOSE implicito per ogni cursore aperto (cfr. embedded SQL) Viene eseguito un SET CONSTRAINTS ALL IMMEDIATE implicito il controllo dei vincoli di integrità può essere INITIALLY DEFERRED al momento della loro definizione (cfr. cicli nei vincoli di integrità referenziale) Viene eseguito un DELETE FROM T per ogni T temporanea per cui era stato specificato un ON COMMIT DELETE Vengono rese permanenti tutte le modifiche effettuate dalla transazione Se qualcuna di queste azioni fallisce (ad es. il controllo dei vincoli) la transazione fallisce e va in rollback Appendice 7 TRANSAZIONI SQL (4) comando ROLLBACK Operazioni eseguite a seguito di un comando ROLLBACK Viene eseguito un CLOSE implicito per ogni cursore aperto (cfr. embedded SQL) Tutte le modifiche effettuate dalla transazione vengono cancellate ( undo ) La transazione è terminata senza successo Appendice 8 4

TRANSAZIONI SQL (5) comando SET TRANSACTION (1) Il comando SET TRANSACION viene usato per definire le caratteristiche della transazione che sta per essere avviata riguardo al Modo di accesso Dimensione dell area diagnostica Livello di isolamento Modo di accesso READ ONLY (le modifiche sono proibite) READ WRITE Dimensione dell area diagnostica DIAGNOSTIC SIZE n (n indica il numero di condizioni che vengono mantenute) Appendice 9 TRANSAZIONI SQL (6) comando SET TRANSACTION (2) Livello di isolamento ISOLATION LEVEL SERIALIZABLE Viene garantito che le transazioni concorrenti siano eseguite in modo serializzabile (modo di default) Non può verificarsi nessuna delle seguenti condizioni Dirty read (es: T1 aggiorna una riga, T2 legge quella riga, T1 va in rollback quindi T2 ha un dato non corretto) Nonrepeatable read (es: T1 legge una riga, T2 modifica quella riga, T1 legge di nuovo quella riga quindi ora legge un dato diverso) Phantoms (es: T1 legge un insieme di righe che soddisfano una certa condizione, T2 inserisce una riga che soddisfa quella stessa condizione, T1 legge nuovamente l insieme di righe che soddisfa quella condizione quindi ora vede un fantasma, cioè una riga che prima non esisteva) Appendice 10 5

TRANSAZIONI SQL (7) comando SET TRANSACTION (3) Livello di isolamento ISOLATION LEVEL REPEATABLE READ Può verificarsi la condizione phantom Livello di isolamento ISOLATION LEVEL READ COMMITTED Possono verificarsi le condizioni nonrepeatable read e phantom Livello di isolamento ISOLATION LEVEL READ UNCOMMITTED Possono verificarsi le condizioni dirty read, nonrepeatable read e phantom Un sistema che supporta qualcuno di questi tre livelli, di solito fornisce anche un qualche comando di LOCK per gestire autonomamente i possibili conflitti I comandi di LOCK non sono previsti da SQL-2 Appendice 11 SQL Embedded (1) Le istruzioni SQL sono inserite direttamente nel programma sorgente Una istruzione SQL deve essere preceduta da exec SQL terminare con ; La compilazione del programma sorgente deve essere preceduta dal richiamo di un preprocessore che sostituisce le istruzioni SQL con opportune chiamate a librerie Deve quindi essere disponibile un preprocessore opportuno per il linguaggio utilizzato e il DBMS a cui si vuole accedere L integrazione tra SQL e linguaggi di programmazione deve affrontare il cosiddetto impedance mismatch (conflitto di impedenza) SQL opera su intere tabelle, è di tipo set oriented i linguaggi di programmazione accedono ad una tabella una riga alla volta, tuple oriented Appendice 12 6

SQL Embedded (2) SQL embedded fornisce un approccio statico alla programmazione che accede a database Il testo della frase SQL è scritto all interno del programma Può essere cambiato solo riprocessando il sorgente Un approccio più dinamico si può avere utilizzando chiamate di funzioni, API, Application Programing Interface In questo caso però il controllo sui comandi SQL (per es. il controllo sintattico) può essere fatto solo al momento dell esecuzione SQl embedded usa il concetto di cursore per recuperare le tuple risultato della select una alla volta Nel caso venga recuperata una sola tupla può essere usata una istruzione alternativa, che fa a meno del cursore, e pone i valori recuperati direttamente in variabili Appendice 13 SQL Embedded (3) Negli esempi facciamo riferimento al linguaggio ospite C Possono essere definite delle variabili condivise fra il programma C e i comandi SQL Le variabili condivise devono essere dichiarate in una opportuna sezione: EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION I comandi SQL si riferiscono alle variabili condivise facendole precedere da : SQLCODE e SQLSTATE sono variabili usate dal DBMS per comunicare condizioni di errore o eccezioni, spesso sono campi del record SQLCA Appendice 14 7

Esempio 1 procedura C [?] Void VisualizzaStipendiDipart (char NomeDip[]) { exec sql begin declare section; char Nome[20], Cognome [20]; long int Stipendio; exec sql end declare section; exec sql declare ImpDip cursor for select Nome, Cognome, Stipendio from Impiegato where Dipart = :NomeDip; exec sql open ImpDip; exec sql fetch ImpDip into :Nome, :Cognome, :Stipendio; printf ( Dipartimento %s\n, NomeDip); while (sqlca.code == 0) { printf ( L impiegato %s %s, Nome, Cognome); printf ( ha stipendio %d\n, Stipendio); exec sql fetch ImpDip into :Nome, :Cognome, :Stipendio; } exec sql close cursor ImpDip; } Appendice 15 Esempio 2 segmento codice C prompt ( Immettere il nome del dipartimento:, nome_d); EXEC SQL SELECT Numero_d INTO :numero_d FROM Dipartimento WHERE Nome_d = :nome_d; EXEC SQL DECLARE Emp CURSOR FOR SELECT Ssn, Nome_batt, Iniz_int, Cognome, Stipendio FROM Impiegato WHERE N_d = :numero_d FOR UPDATE OF Stipendio; EXEC SQL OPEN Emp; EXEC SQL FETCH FROM Emp INTO :ssn, :nome_batt, :iniz_int, :cognome, :stipendio; while (SQLCODE == 0){ printf ( Il nome dell impiegato è:, nome_batt, iniz_int, cognome); prompt( Immettere l importo dell aumento :, aumento); EXEC SQL} Appendice 16 8

Note all esempio Il preprocessore introduce una struttura dati sqlca (SQL Communication Area) in cui ci sono dati di comunicazione fra il programma e il DBMS sqlca.code contiene il codice d errore dell ultimo comando SQL inviato al DBMS ( 0 = OK) exec sql begin/end declare section delimitano le variabili C da utilizzare come parametri per i comandi SQL (variabili host) Un cursore è uno strumento che permette di accedere alle righe di una tabella una alla volta declare definisce un cursore associato ad una interrogazione open manda in esecuzione la query e inizializza il cursore alla prima riga del risultato fetch copia la riga puntata dal cursore nelle variabili e posiziona il cursore sulla riga successiva close chiude il cursore, il risultato della query non è più necessario Appendice 17 Remote Procedure Call (1) Strumento per costruire software di tipo client/server usando una astrazione della tradizionale chiamata a procedura Quando un client chiama una procedura remota, invia un messaggio di richiesta al server attraverso la rete Dopo aver inviato la richiesta, il client si blocca in attesa della risposta Quando il programma remoto (server) riceve una richiesta da un client, invoca la procedura specificata e manda il risultato indietro al client Per implementare l interazione è necessario del software apposito Dalla parte del client gestisce l invio del messaggio sulla rete e l attesa della risposta Dalla parte del server gestisce la ricezione del messaggio, il richiamo della procedura specificata e l invio della risposta Il software aggiuntivo è chiamato communication stub o proxy Appendice 18 9

Remote Procedure Call (2) main prog main prog server stub for B proc B client stub for B proc B single computer client server Appendice 19 Remote Procedure Call (3) Il programma usa le procedure call come se fossero locali Se viene fatta una call a una procedura che non è locale Il communication stub intercetta la procedure call Raccoglie i valori degli argomenti (operazione di marshaling ) Invia un messaggio al communication stub sul server Questi usa il tradizionale procedure call per attivare la procedura specifica e invia il risultato indietro al client stub Quando il client stub riceve la risposta, la passa al suo chiamante esattamente come se fosse una procedura locale Le call dal main al client stub e dal server stub alla procedura usano la stessa interfaccia della call convenzionale del main alla procedura Ai client stub può essere dato lo stesso nome della procedura che rimpiazzano, così non viene cambiato il codice del programma originale Appendice 20 10