Utilizzare SQL nelle applicazioni
Sistemi Informativi
Uso di SQL e nei linguaggi di programmazione
DEE - Politecnico di Bari
• 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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
PRINCIPALI APPROCCI
DEE - Politecnico di Bari
• Call Level Interface (CLI)
SQL statico
• SQL embedded (SQL “integrato”)
SQL dinamico
• Stored Procedures
3
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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*/
}
5
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;
}
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
#include
#include
#include
<ecpgtype.h>
<ecpglib.h>
<ecpgerrno.h>
<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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
ESEMPIO 3
DEE - Politecnico di Bari
…
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
MODALITÀ DI ESECUZIONE
Le operazioni SQL possono essere:
•
•
Esempio:
Char *
Con esecuzione immediata (in assenza di parametri)
SQL_string=“delete from Impiegato
execute immediate SQLStatement
where CF=27”;
…
exec sql execute immediate :
SQL_string;
Con esecuzione differita e ripetibile (anche con parametri):
prepare CommandName from SQLStatement
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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.
API
Oracle
Oracle
Prog
C
API
Interbase
Interbase
13
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
•
•
•
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
Oracle
JDBC
API
Driver
Interbase
Interbase
14
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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;
Definizione
Chiamata
exec sql Update_address(:codice,:indirizzo);
21
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
Variabili e Tipi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
Un semplice esempio
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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;
b NUMBER;
BEGIN
SELECT e,f INTO a,b FROM T1 WHERE e>1;
IF b=1 THEN
INSERT INTO T1 VALUES(b,a);
ELSE
INSERT INTO T1 VALUES(b+10,a+10);
END IF;
END;
.
run;
25
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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>
FOR <var> IN <start>..<finish> LOOP
26
END LOOP;
<loop_body>
Utilizzare SQL nelle applicazioni
END LOOP;
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
addtuple2(10, 'abc');
END;
.
run;
30
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
Stored Procedures in PL/SQL
CREATE TABLE T3 ( a INTEGER, b INTEGER);
CREATE PROCEDURE addtuple3(a IN NUMBER, b OUT NUMBER) AS
BEGIN
b := 4;
INSERT INTO T3 VALUES(a, b);
END;
.
run;
Eseguiamo la procedura:
DECLARE v NUMBER;
BEGIN
addtuple3(10, v);
END;
.
run;
31
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
Funzioni
• Le funzioni vengono trattate analogamnete alle
procedure:
CREATE FUNCTION <func_name>(<param_list>)
RETURN <return_type> AS ...
..
RETURN <expression>
32
Utilizzare SQL nelle applicazioni
E. Di Sciascio
Sistemi Informativi
DEE - Politecnico di Bari
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
Utilizzare SQL nelle applicazioni
E. Di Sciascio