Utilizzare SQL nelle applicazioni



Похожие документы
SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Lezione 9. Applicazioni tradizionali

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

Corso di Informatica Modulo T3 B2 - Database in rete

Oracle PL/SQL. Motivazioni

APPENDICE. Procedure in SQL (1)

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

SQL nei linguaggi di programmazione

Funzioni scalari in SQL. Capitolo 5. coalesce. nullif. Altre funzioni scalari. case

JDBC versione base. Le classi/interfacce principali di JDBC

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

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

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

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

Programmazione Java Avanzata Spring - JDBC

GERARCHIE RICORSIVE - SQL SERVER 2008

SQL e linguaggi di programmazione Applicazioni ed SQL: architettura

Database e reti. Piero Gallo Pasquale Sirsi

Volumi di riferimento

19. LA PROGRAMMAZIONE LATO SERVER

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

LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE

JDBC di base. Le classi/interfacce principali di JDBC

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

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

Dominio applicativo. Progettazione. v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures

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

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

Corso sul linguaggio SQL

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC

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

Esercitazione 4 JDBC

Architettura MVC-2: i JavaBeans

Definizione di domini

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

JDBC. A. Bechini Accesso a DataD con Java

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

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

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

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Guida alla registrazione on-line di un DataLogger

Informatica per le discipline umanistiche 2 lezione 10

Introduzione JDBC interfaccia java.sql driver caricare i driver

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

User Tools: DataBase Manager

Esercitazione 01: DDL e DML di base

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

DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures

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

Data Base in Internet

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

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

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

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

2104 volume III Programmazione

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

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

Lezione 8. Metadati, Viste e Trigger

OSSIF WEB. Manuale query builder

Uso dei data bases con PHP. Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni

Dispensa di database Access

La tecnologia ASP.NET e i database

DBMS (Data Base Management System)

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

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

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

Esercitazione sulle libpq - libreria C per PostgreSQL

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

Una metodologia di progettazione di applicazioni web centrate sui dati

Il linguaggio SQL: query innestate

SQL e linguaggi di programmazione

Esercitazione su JDBC

Le query. Lezione 6 a cura di Maria Novella Mosciatti

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

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

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

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Manuale d uso Software di parcellazione per commercialisti Ver [05/01/2015]

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Unità 2.1 Comandi sui database

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

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

MySQL Database Management System

2015 PERIODO D IMPOSTA

Capitolo 13. Interrogare una base di dati

I database relazionali (Access)

APPUNTI SU ADO (ACTIVEX DATA OBJECTS)

Транскрипт:

Uso di SQL e nei linguaggi di programmazione Nella vita reale l interazione con basi di dati utilizzando SQL non è diretta, ma mediata attraverso l uso di programmi applicativi. Oltre ai tradizionali linguaggi di programmazione di alto livello procedurali ed a oggetti (Cobol,C,PL/SQL) esistono i cosiddetti linguaggi di quarta generazione (4GL) come Informix4GL che permettono di sviluppare complete applicazioni per la gestione di basi di dati. SQL da solo non è Touring-Completo E necessario stabilire modalità di interazione tra SQL e tali linguaggi. I problemi di interazione sono rappresentati dall Impedence mismatch ( disaccoppiamento di impedenza ) fra base di dati e linguaggio di programmazione poiché i linguaggi operano tipicamente su singole variabili o oggetti mentre SQL opera su relazioni (insiemi di tuple) In alcuni approcci la soluzione ai problemi di interazione è rappresentata dall uso dei cursori 2

PRINCIPALI APPROCCI Call Level Interface (CLI) SQL embedded (SQL integrato ) SQL statico SQL dinamico Stored Procedures 3

EMBEDDED SQL Tecnica sviluppata sin dagli anni 70 L SQL è ospitato in un linguaggio di programmazione, chiamato linguaggio ospite (Java, Pascal, Cobol, C, C++, ), in quanto questi standard hanno definito l interfaccia con SQL: il sorgente del vostro programma contiene sia codice nel linguaggio di programmazione che codice sql un preprocessore, dipendente sia dal linguaggio ospite che dalla piattaforma del DBMS viene usato per analizzare il codice e tradurlo sostituendo le istruzioni SQL con chiamate alle funzioni di una API del DBMS prima della compilazione vera e propria Ogni programma che usa Embedded SQL deve: 1. Definire quale database usare 2. Connettersi al database 3. Effettuare le operazioni sul database (usando cursori e statementsql) 4. Disconnettersi dal database 4

ESEMPIO in C di SQL statico prima. #include<stdlib.h> #include<stdio.h> #include<sqlenv.h> main() { exec sql begin declare section; /*dichiarazione variabili*/ char *NomeDip = DEE"; int Id_Dip = 3; exec sql end declare section; /*fine della dichiarazione variabili*/ } exec sql connect to esempio@azienda_esempio; if (sqlca.sqlcode!= 0) { /*sqlca (SQL Communication Area) è una struttura di dati predefinita che mantiene le informazioni sulla comunicazione tra SQL e programma, sqlcode=0 no errore, altrimenti codice dell errore*/ printf( Errore di connessione al DB\n"); } else { exec sql insert into Dipartimento values(:nomedip,:id_dip); /* notare l uso del : per utilizzare le variabili del programma ospite in SQL*/ exec sql disconnect all; } 5

ESEMPIO in C di SQL statico prima e dopo main() { exec sql connect to universita user pguser identified by pguser; exec sql create table studente (matricola integer primary key, nome varchar(20), annodicorso integer); exec sql disconnect; } /* These include files are added by the preprocessor */ #include <ecpgtype.h> #include <ecpglib.h> #include <ecpgerrno.h> #include <sqlca.h> main() { ECPGconnect( LINE, "universita", "pguser", "pguser", NULL, 0); ECPGdo( LINE, NULL, "create table studente ( matricola integer primary key, nome varchar ( 20 ), annodicorso integer )", ECPGt_EOIT, ECPGt_EORT); ECPGdisconnect( LINE, "CURRENT"); } 6

ESEMPIO 3 select Nome, Cognome into :nome_imp, :cognome_imp from Impiegato where CF = :CF_imp; Finché il risultato di una query è solo un record è tutto semplice 7

CURSORI Quando una query restituisce più tuple è necessario passarle al programma ospite una per volta Si utilizza un cursore per accedere a tutte le tuple di una interrogazione, accede a tutte le tuple di una interrogazione in modo globale (tutte insieme o a blocchi è il DBMS che sceglie la strategia efficiente); il cursore passa poi una tupla per volta al programma Il cursore viene definito su una generica interrogazione mediante la seguente sintassi declare Cursor_Name [scroll ] cursor for SelectSQL [for <read only update [of attribute,{attribute}]>] Dove, scroll indica che il cursore può muoversi liberamente sul risultato della query, mentre for update indica che il cursore può essere utilizzato in operazioni di aggiornamento permettendo di specificare eventualmente gli attributi oggetto del comando. Si osservi che per riga corrente si considera l ultima riga letta. 8

UTILIZZO DEL CURSORE Esegue la query: open Cursor_Name Utilizzo dei risultati (una ennupla alla volta): fetch [position from] Cursor_Name into Variables (accedere alla tupla corrente del risultato o a quella indicata da position e porne i valori nelle variabili del programma ospite) Position (utilizzabili se l opzione scroll è stata imposta altrimenti è disponibile solo next) : next (con riferimento a current indica la prossima tupla); prior (tupla precedente); first (prima tupla); last (ultima tupla); absolute integer_value (tupla posizionata al valore ordinale espresso) relative integer_value (tupla posizionata al valore ordinale espresso, rispetto alla posizione corrente) Accedere alla tupla corrente di un cursore per effettuare un update o un delete (si usa solo nella clausola where e quando la query associata al cursore non esegue un join tra diverse tabelle): es. Delete from NomeTabella where current of Cursor_Name Chiusura: close cursor Cursor_Name 9

ESEMPIO IN C CON UTILIZZO DI CURSORI printf( nome della citta? ); scanf( %s,&citta[0]); /*creo il cursore*/ EXEC SQL DECLARE P CURSOR FOR SELECT NOME, REDDITO FROM Impiegato WHERE CITTA = :citta for UPDATE of REDDITO; EXEC SQL OPEN P ; /* apro il cursore -> eseguo la query*/ EXEC SQL FETCH P INTO :nome, :reddito ; /*prelevo i dati*/ while (sqlca.sqlcode == 0) { printf( Qual è l aumento per %s?, nome); scanf( %d,&aumento); EXEC SQL UPDATE Impiegato SET REDDITO = REDDITO + :aumento WHERE CURRENT OF P; /*eseguo l update su current*/ EXEC SQL FETCH P INTO :nome, :reddito; ; /*prelevo i dati per la tupla immediatamente successiva*/ } EXEC SQL CLOSE CURSOR P; }.. 10

DYNAMIC SQL Non sempre le istruzioni SQL sono note quando si scrive il codice ospite (si pensi, ad esempio, ad un applicazione che interagisce con utenti). E stata introdotta una tecnica completamente diversa, chiamata SQL dinamico, che permette di generare istruzioni SQL a tempo di esecuzione (addirittura ricevute dal programma attraverso parametri o da input). Ovviamente, la tecnica porta ad un degrado delle prestazioni. Le operazioni in SQL dinamico possono essere eseguite immediatamente oppure prima preparate e poi eseguite (anche più volte) La differenza è che, in SQL statico, i nomi delle relazioni e degli attributi coinvolte nelle istruzioni SQL sono fissate a priori; l unica parte delle istruzioni che può rimanere non nota a tempo di compilazione è costituita dagli specifici valori da ricercare o da aggiornare. Nell SQL dinamico, invece, le istruzioni SQL sono generate a tempo di esecuzione; non è quindi necessario specificare relazioni e attributi coinvolti in una istruzione SQL prima della sua esecuzione. 11

MODALITÀ DI ESECUZIONE Le operazioni SQL possono essere: Con esecuzione immediata (in assenza di parametri) execute immediate SQLStatement Con esecuzione differita e ripetibile (anche con parametri): prepare CommandName from SQLStatement Esempio: Char * SQL_string= delete from Impiegato where CF=27 ; exec sql execute immediate : SQL_string; execute CommandName [into TargetList][using ParameterList] Esempio: Prepare :trova_nome From select nome from Impiegato where CF =? Execute :trova_nome into:nome_imp using :cf_imp Rilascio del comando: Deallocate prepare :trova_nome 12

CLI COME SI UTILIZZANO E una Application Programming Interface (API) per accedere ai databases, cioè un insieme di funzioni chiamabili direttamente dal linguaggio di programmazione usato. Il database mette a disposizione una libreria di funzioni, che seguono lo standard CLI. Generalmente vengono usate per applicazioni basate su SQL dinamico. Prog C API Oracle API Interbase Oracle Interbase 13

EVOLUZIONE di CLI Utilizza dei driver specifici per ciascun database E uno strato software che si interpone tra l applicazione e i driver specifici del database. Consente quindi ai programmi applicativi di usare query standard SQL, che accederanno al database, senza necessità di conoscere la particolare interfaccia proprietaria. Un modulo del linguaggio di programmazione fornisce una API (serie di funzioni o classi se OO) che permette di interfacciare qualsiasi database tramite un driver specifico per quel database (es. ODBC, JDBC) Driver Oracle Prog JAVA JDBC API Oracle Driver Interbase Interbase 14

Implementazioni delle CLI ODBC (Open Database Connectivity): implementazione proprietaria (Microsoft) di SQL/CLI (altra CLI parte di SQL:1999), per accesso a basi di dati relazionali in un contesto eterogeneo e distribuito. Originariamente rilasciata nel 1992, consente di accedere a database di numerosissimi costruttori, inclusi Microsoft (jet, Access, SQLServer); Oracle, IBM, Informix e numerosi altri. JDBC (Java Database Connectivity): è un API Java sviluppata da JavaSoft per eseguire istruzioni SQL e consente ai programmi Java di interagire con qualunque database. Poiché Java gira sulla maggior parte delle piattaforme, JDBC rende possibile scrivere una singola applicazione di database che può girare indifferentemente su piattaforme diverse e interagire con diversi database. JDBC è simile a ODBC ma è progettato apposta per programmi Java mentre ODBC è indipendente dal linguaggio di programmazione. Nello scrivere programmi in Java e usando l interfaccia JDBC si può usare un prodotto che comprende un "bridge" program JDBC-ODBC per raggiungere database ODBC-accessible. In generale le operazioni richieste sono: caricamento del driver, apertura della connessione con la base di dati, richiesta di esecuzione di istruzioni SQL ed elaborazione dei risultati delle istruzioni SQL 15

ODBC e ADO ODBC è uno strato software che si interpone tra l applicazione e i driver specifici del database. Consente quindi ai programmi applicativi di usare query standard SQL, che accederanno al database, senza necessità di conoscere la particolare interfaccia proprietaria. ODBC richiede una certa familiarità di programmazione con le API ed è sostanzialmente procedurale (Scritta in C). Successivamente Microsoft ha introdotto altre due API, questa volta orientate agli oggetti, che vanno sotto il nome di DAO (Data Access Object) e RDO (Remote Data Object), che sono sostanzialmente interfacce per il motore ODBC. Esse definiscono interfacce ActiveX (originariamente COM Component Object Model). Più recentemente Microsoft ha introdotto ADO (Active Data Object), basata su una nuova tecnologia di programmazione delle interfacce per DB nota come OLE DB (Object Linking and Embedding for DataBases). La differenza sostanziale con ODBC è che in questo ogni ogni tipo di DB deve avere una DLL (Dynamic Link Library), un driver ODBC, che viene utilizzata dal motore ODBC per accedere allo specifico DB. In OLE DB is hanno ancora dei driver, ma questi sono implementazioni ActiveX, cioè definizioni di classi che implementano delle interfacce, eliminando così i livelli interposti tra il programma e lo specifico DBMS che si sta utilizzando. Tipicamente si utilizza per applicazioni web ODBC in congiunzione con ADO. 16

Attivazione di una origine dati ODBC N.B. Si suppone la presenza di un database ACCESS Selezionare Pannello di Controllo Cliccare su Origine dati ODBC Selezionare la scheda DSN di sistema ovvero DSN Utente Cliccare su aggiungi Selezionare il driver (Microsoft Access) Inserire nella scheda il nome di riferimento dell'origine dati Cliccare su Database: Seleziona Selezionarere Database Premere OK 17

Basi di ADO ADO è composto essenzialmente da tre oggetti primari: Connection Object, Command Object, RecordSet Object: Connection Object è responsabile di raccogliere tutte le informazioni necessarie alla creazione del RecordSet; RecordSet fornisce la struttura atta a contenere i dati e i metodi necessari per accedere ai dati presenti nel RecordSet, tutte le funzionalità dei cursori sono rappresentati nell interfaccia del RecordSet; Command Object fornisce un secondo metodo per creare un RecordSet, ed è stato esplicitamente progettato per passare i parametri alle stored procedure. 18

Un semplice esempio in ASP Creo un istanza del componente e la assegno a conn <% set conn=server.createobject("adodb.connection") %> apro la connessione al database mediante una origine dati ODBC <%conn.open "northwind,, %> Definisco una query Sqlstring="Select * from Customers" Creo un recordset e gli passo la query: <% Set rs=server.createobject("adodb.recordset") rs.open Sqlstring, conn %> Visualizzo i dati estratti: <% for each x in rs.fields response.write(x.name) response.write(" = ") response.write(x.value) next %> <%conn.close%> 19

SQL Embedded VS CLI SQL embedded pemette precompilazione (e quindi efficienza e portabilità del sorgente) uso di SQL completo Molto usato in applicazioni legacy CLI indipendente dal DBMS, uso di funzioni di interazione con i DBMS attraverso Application Programming Interfaces (API) permette di accedere a più basi di dati, anche eterogenee (senza ricompilazione: portabilità dell eseguibile): richiede un ulteriore strato di comunicazione esistono drivers specifici per i vari DBMS 20

STORED PROCEDURES A partire da SQL-2 è possibile definire procedure dette stored procedures per il fatto che vengono memorizzate all interno della base di dati come parti dello schema. Le procedure permettono di associare un nome ad una o più istruzioni SQL, con la possibilità di specificare dei parametri da utilizzare per lo scambio di informazioni con la procedura. I vantaggi sono: minor quantità di dati trasferita tra client e server, una più facile manutenibiltà, favorisce il riutilizzo della logica dell applicazione da parte di utenti diversi, delega all utilizzo dei diritti di accesso e la possibilità di ottenere in diversi casi un sensibile incremento delle prestazioni. In tal modo però la logica di business risulta in gran parte inglobata nella base di dati. Una volta che la procedura è definita, essa è utilizzabile come se facesse parte dell insieme dei comandi SQL predefiniti. La procedura può essere invocata avendo cura di associare un valore ai Parametri. procedure Update_address(:cod_dip int, :Addr varchar(60)) Begin; update Department set Address =:Addr where ID_dip =:cod_dip End; exec sql Update_address(:codice,:indirizzo); Definizione Chiamata 21

PL/SQL (Procedural Language/SQL) Molti sistemi, e.g Oracle PL/SQL, presentano estensioni ricche e più complesse (ad es. costrutti if else, cicli while) che rendono SQL un linguaggio computazionalmente completo ossia con lo stesso potere espressivo di un normale linguaggio di programmazione. Noi ci riferiamo a PL/SQL (implementazione Oracle sqlplus ) L elemento logico base è il blocco: DECLARE /* Declarative section: variables, types, and local subprograms. */ BEGIN /* Executable section: procedural and SQL statements go here. */ /* This is the only section of the block that is required. */ EXCEPTION /* Exception handling section: error handling statements go here. */ END; Per eseguire un programma PL/SQL al testo bisogna far seguire: Una riga con. Una riga con run 22

Variabili e Tipi Una variabile unbound ha sempre valore NULL. Esistono i tipi di SQL, ma anche tipi nuovi, quali Number DECLARE price NUMBER; mybeer VARCHAR(20); Usare %TYPE: DECLARE mybeer Beers.name%TYPE; /* Assegna direttamente a mybeer il tipo di name */ Usare %ROWTYPE per definire record strutturati: DECLARE beertuple Beers%ROWTYPE; Assegnare valori DECLARE a NUMBER := 3; BEGIN a := a + 1; END;. run; 23

Un semplice esempio CREATE TABLE T1(e INTEGER, f INTEGER ); INSERT INTO T1 VALUES(1, 3); INSERT INTO T1 VALUES(2, 4); /* Above is plain SQL; below is the PL/SQL program. */ DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1; INSERT INTO T1 VALUES(b,a); END;. run; Si noti l obbligo della keyword INTO 24

Flusso di controllo: IF IF <condition> THEN <statement_list> ELSE <statement_list> END IF; la parte ELSE è opzionale. Si può fare multiway branch: IF <condition_1> THEN... ELSIF <condition_2> THEN......... ELSIF <condition_n> THEN... ELSE... END IF; Esempio: DECLARE a NUMBER; BEGIN b NUMBER; SELECT e,f INTO a,b FROM T1 WHERE e>1; IF b=1 THEN ELSE INSERT INTO T1 VALUES(b,a); INSERT INTO T1 VALUES(b+10,a+10); END IF; END;. run; 25

Flusso di controllo: Cicli LOOP <loop_body> /* A list of statements. Inclusivi di un EXIT WHEN <condition>;*/ END LOOP; Esempio: DECLARE i NUMBER := 1; BEGIN LOOP INSERT INTO T1 VALUES(i,i); i := i+1; EXIT WHEN i>100; END LOOP; END; Esistono anche: WHILE <condition> LOOP <loop_body> END LOOP; FOR <var> IN <start>..<finish> LOOP <loop_body> END LOOP; 26

Basic I/O DECLARE emp_count NUMBER; BEGIN SELECT count(*) INTO emp_count FROM employees WHERE department_id = &department_id; END; Produrrà in esecuzione: Enter value for department_id: 13 Stampare a video: DBMS_OUTPUT.PUT_LINE( hello world emp_count); 27

Usare i cursori 1) DECLARE /* Declare output variables to hold the result of the query: */ 2) a T1.e%TYPE; 3) b T1.f%TYPE; /* Cursor declaration: */ 4) CURSOR T1Cursor AS 5) SELECT e, f 6) FROM T1 7) WHERE e < f 8) FOR UPDATE; 9) BEGIN 10) OPEN T1Cursor; 11) LOOP /*Retrieve each row of the result of the above query into PL/SQL variables:*/ 12) FETCH T1Cursor INTO a, b;/* If there are no more rows to fetch, exit the loop*/ 13) EXIT WHEN T1Cursor%NOTFOUND; /* Delete the current tuple: */ 14) DELETE FROM T1 WHERE CURRENT OF T1Cursor; /* Insert the reverse tuple: */ 15) INSERT INTO T1 VALUES(b, a); 16) END LOOP; /* Free cursor used by the query. */ 17) CLOSE T1Cursor; 18) END; 19). 20) run; 28

Stored procedures in PL/SQL CREATE TABLE T2 ( a INTEGER, b CHAR(10)); Dichiarazione di una stored procedure: CREATE REPLACE PROCEDURE proc_name(var_name IN OUT INOUT Data_type) AS IS Esempio: CREATE PROCEDURE addtuple1(i IN NUMBER) AS BEGIN INSERT INTO T2 VALUES(i, 'xxx'); END addtuple1;. run; Esecuzione: BEGIN addtuple1(99); END;. run; Eliminazione: DROP PROCEDURE <proc_name> 29

Stored Procedures in PL/SQL CREATE PROCEDURE addtuple2(x IN T2.a%TYPE, y IN T2.b%TYPE) AS BEGIN INSERT INTO T2(a, b) VALUES(x, y); END addtuple2;. run; Esecuzione BEGIN END;. run; addtuple2(10, 'abc'); 30

Stored Procedures in PL/SQL CREATE TABLE T3 ( a INTEGER, b INTEGER); CREATE PROCEDURE addtuple3(a IN NUMBER, b OUT NUMBER) AS BEGIN END;. run; b := 4; INSERT INTO T3 VALUES(a, b); Eseguiamo la procedura: DECLARE v NUMBER; BEGIN END;. run; addtuple3(10, v); 31

Funzioni Le funzioni vengono trattate analogamnete alle procedure: CREATE FUNCTION <func_name>(<param_list>) RETURN <return_type> AS..... RETURN <expression> 32

Procedura di iscrizione al programma Oracle Academy Visitare la pagina principale di Oracle Academy - sezione Advanced Computer Science (https://oai.oracle.com/en/index1.html) Seguire il link nel menu di sinistra: Apply for Student Membership Selezionare il paese (Italy) e quindi procedere con Continue Presa visione delle caratteristiche del contratto, scaricare la versione stampabile del contratto di licenza Oracle Academy (link Versione Stampabile), poi procedere con Continua Si aprirà un motore di ricerca: digitare nel campo di ricerca Politecnico di Bari Quindi seguire il link sul campo Politecnico di Bari e selezionare Dipartimento Di Elettrotecnica ed Elettronica A questo punto sarà richiesto di inserire le informazioni di accounting (Nome, Cognome, indirizzo di posta elettronica e password). Alla termine dell inserimento cliccate su Invia Domanda Nel momento in cui la registrazione sarà stata autorizzata da noi, sarà possibile accedete alla pagina https://oai.oracle.com/pls/oai/oai_login.home, inserendo user name e password. Per accedere agli strumenti oracle basta cliccare nel menu di sinistra su oracle.com e quindi spostarsi nella sezione download. 33