05108122, 08:25 PProgrammare in PL-SQL.: quida facile per princpiant
L(t aS)
Ved ae
Cae RENAN my
npara a creare Applicazioni Aziendali grazie
alle piattaforme di sviluppo Low-Code
Programmare in PL-SQL: guida facile per
principianti
GiusNo 17, 2021
Se hai gid avuto modo di lavorare su database Oracle, é possibile che tu abbia sentito parle
di PL-SQL.
Acronimo di Procedural Language SQL, il PL-SQL é un vero e proprio linguaggio procedurs
messo a disposizione da Oracle per estendere e completare le funzionalita di SQL all'inter
del suo famoso database
Il concetto di linguaggio procedurale non @ insolito e quasi tutti i database pil famosi
supportano una qualche versione. Ad esempio, in SQL Server Microsoft c’é i] Transact-S'
(0 T-SQL).
Ma perché il PL-SQL, ed in generale i linguaggi procedurali, sono cosi utili?
Per capirlo é bene soffermarci su una caratteristica peculiare del linguaggio SQL, ovverc
fatto che da solo non permette di costruire dei programmi, owero delle procedure che sia
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare sa
in grado di effettuare operazioni complesse e correlate tra di loro.510822, 08.25 Programmare in PL-SQL: guia facie per prncpiant
Mentre il classico SQL viene generalmente utilizzato per eseguire operazioni atomiche cor
modificare e interrogare i dati de! database, il PL-SQL viene a colmare le carenze di Si
migliorandone le caratteristiche.
Come la maggior parte dei linguaggi procedurali, il PL-SQL mette a disposizione, oltre a tut
costrutti dell’SQL, anche i controlli condizionali, i cicli iterativi, la gestione delle variabil
delle costanti, la gestione delle eccezioni, delle procedure, delle funzioni, ecc.
In questa guida al pl-sql per principianti, desidero spiegarti quali sono le funzionalita
importanti che devi conoscere per essere in grado di creare da zero un programma PL-S!
completo e funzionante.
IN QUESTO ARTICOLO
Prima di iniziare
Introduzione
Struttura di Base di un blocco PL/SQL
Hello Word in PL-SQL
Sezione delle dichiarazioni
Dichiarazione delle Variabili
Dichiarazione dei Cursori
Blocco di Programma
Assegnazioni ed espressioni
Uso dei Cursori
Cursori Semplici
Cursori Parametrici
Ancora sui Cursori
Funzioni, Procedure e Packages
Creare una procedura in PL-SQL
Creare una funzione in PL-SQL
Creare un package in PL-SQL
Strutture condizionali in PL/SQL
Gestire le eccezioni in PL/SQL
Eccezioni di sistema
Eccezioni utente
Conclusioni
Prima di iniziare
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 2134osins22, 08:25 Programmara in PLL: gud fac pr prnciant
Non essendo un corso approfondito, non tratterd ogni singolo aspetto o funzionalita «
linguaggio PL-SQL.
Piuttosto, mi soffermerd su quei concetti (pochi, non spaventarti) che sono fondamentali
acquisire una competenza minima ma sufficiente per fare la maggior parte delle cose.
Lunico prerequisite é una conoscenza di base del linguaggio SQL e dei suoi conce
principali.
Nel giro di un paio d’ore, se mi seguirai con attenzione, sarai in grado di sviluppare il t
primo programma PL-SQL e potrai creare applicazione Oracle APEX belle e funzionali
Devi sapere, infatti, che il PL-SQL @ una delle competenze fondamentali che devi conosce
se vuoi creare applicazioni complesse in Oracle APEX.
le Trasal
ll mio nome @ Dar autore di APPinSMinuti, il blog italiano che parla di
piattaforme e applicazioni low-code.
Qui troverai tantissimi tutorial e risorse per imparare a sviluppare in pochissimo
tempo bellissime applicazioni per gestire j dati ed i processi della tua azienda.
Pensi di non essere in grado? Perché non provi adesso a creare la tua prima
applicazione in 5 minuti?
Introduzione
Quando si é alle prese con la creazione di applicazioni web basate sui dati (data-centric w
applications) & normale porre una certa attenzione alla progettazione dello schema logico
allo stesso tempo, all’implementazione di tutte quelle funzionalita necessarie per leggere
manipolare i dati.
Con Oracle APEX creare applicazioni in grado di inserire, modificare e cancellare records ¢
database @ un gioco da ragazzi.
Tuttavia, potresti aver bisogno di progettare applicazioni piu complesse che siano in grado
svolgere operazioni sui dati che vanno oltre il semplice INSERT 0 UPDATE. 1
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare ssaosins22, 08:25 Programmara in PLL: gud fac pr prnciant
| modi che hai a disposizione per assolvere a questo compito sono molteplici e dipendor
ovviamente, dalla piattaforma sulla quale sviluppi
Se stai creando una applicazione basata su database Oracle puoi usare il PL/SQL che me
a disposizione, oltre a tutti i costrutti dell’SQL, anche i controlli condizionali i cicli iterativi,
gestione di variabili e la gestione delle eccezioni.
Inoltre, & possibile raggruppare il codice in particolari oggetti (procedure e funzioni) che
loro volta possono essere raccolte in packages per creare delle vere e proprie librerie
Non spaventarti, tra poco tutti questi concetti saranno pill chiari
Se non hai un database Oracle a disposizione non devi preoccupar
ti permette di sviluppare, testare e implementare applicazioni su Oracle Clot
gratuitamente.
racle Cloud Free T
Per quanto riguarda ambiente di sviluppo puoi usare SQL Developer (preferibile a rr
awviso) oppure lavorare direttamente in Oracle APEX usando la funzionalita SQL Workshop
Struttura di Base di un blocco PL/SQL
Un concetto centrale del linguaggio PL/SQL @ quello di blocco al cui interno @ possib
sctivere le diverse istruzioni SQL nonché i vari costrutti “accessori” messi a disposizione
questo linguaggio di programmazione.
Un blocco pud contenere la dichiarazione di costanti e variabili, uno 0 pid contr
condizionali utili per indirizzare il lavoro delle nostre query, cicli iterativi con i quali “scorrere
record delle nostre tabelle, la gestione delle eccezioni, i cursori (che tratterer
specificatamente in seguito), chiamate ad altri blocchi, ecc.
I blocchi a loro volta possono essere contenuti in altri blocchi, piuttosto che in ste
procedures e functions. | packages sono delle librerie di procedure e funzioni e vengo
solitamente usati per raggruppare logicamente queste ultime.
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 4134ainsi, 08:25 Programmarein PL-SOL: ui faci per print
Ad esempio ci sono packages predefiniti di Oracle come quelli per la manipolazione di fil
le routines di input e output ecc.).
Ogni blocco PL/SQL inizia con la parola chiave BEGIN e termina con la parola chiave END
ogni istruzione compresa all'interno del blocco deve terminare con il punto e virgola.
Avremo quindi una sintassi di questo tipo
Sean
cae
reameoll
La struttura standard di un blocco PL-SQL é costituita da 3 parti ben distinte:
+ DECLARE: sezione di dichiarazione, dove andrai a dichiarare variabili e i cursori (tra
poco capirai cosa sono) che userai nel programma.
+ BEGIN: sezione di esecuzione. In questo punto andrai a scrivere le istruzioni che il tuo
programma deve eseguire.
+ EXCEPTION: dove andrai a scrivere il codice per gestire le eccezioni e gli errori che
vengono lanciati
Le sezioni DECLARE e EXCEPTIONS sono facoltative, mentre la fine del blocco viene indicz
con la parola chiave END.
Puoi annidare dei blocchi, ovvero definire un blocco che a sua volta contiene altri blocchi F
SQL.
Potremo quindi avere qualcosa del tipo:
Caan
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare05108122, 08:25 PProgrammare in PL-SQL: quid facle per princpiant
Pee eer en
All'interno di un blocco possono essere presenti dei commenti. Se il commento si estende
di una sola riga potremo scrivere la nostra riga preceduta da 2 trattini come di seguito
Se invece il commento si estende su pil righe, piuttosto che far precedere ogni riga «
trattini come sopra, scriveremo tutto I'insieme tra le coppie /* e */ come di seguito:
Hello Word in PL-SQL
Prima di andare avanti, credo possa essere utile mettere da subito in pratica quanto t
imparato fino a questo momento creando la tua prima applicazione PL-SQL.
Scoprirai che non c’é nulla di complicato.
Collegati al tuo database Oracle usando SQL Developer
Apri un foglio di lavoro
Da meni Visualizza seleziona Output DBMS: serve per visualizzare un finestra in cui
andremo a stampare dei messaggi a video, utile soprattutto per il debug dei programr
Clicca il pulsante Abilitare DBMS_OUTPUT per la Connessione
hitpsslappinSminut.tvprogrammare-plsql-guide-per-principiantifPrima_dl_iniiare ane05108122, 08:25
low x
PProgrammare in PL-SQL.: quida facile per princpiant
1A|\2al\ae¢as|
Fogio di avoro
PRS Gi Gi [omensene bter/20000 |
oe x |
+ Vai nel foglio di lavoro ed inserisci i] seguente codice PL-SQL
Sete
eee ee eT
ea te eee
(@roev x]
|>PaB-BAaleBl\a¢ars|
Foalo dilavoro | Query Bulder
Sideclare
message varchar2 (500);
begin
message
‘Hello Word!";
Messoao\-Loo _|vtputOBMS
OE A [rersoetite ann |
oer x
+ Clicca esegui per eseguire il programma
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_di_iniiare(05105722, 08:25, PProgrammare in PL-SQL.: quid facle per princpiant
(Gioev x
Pla y-walesl\eeax|
(Query euler
Fideclare
1_message varchar2 (500);
begin
L_moeeage := ‘Hello Werd!';
line (1_m
age):
end;
+ Nella finestra Output Script dovresti leggere il messaggio “Procedura PL/SQL
completata correttamente” mentre nella finestra Output DBMS dovresti leggere la
stringa ‘Hello Word!”
(Gow x
PES - BAa\28\aeax|
[Query Buller |
declare
1_message varchar2 (500);
Fogio dilavoro
begin
l_message := ‘Hello Word!';
er
GEG Bl | tekcampeto 0,561 second
Procedura FL/SOL completata correttemente.
‘Messaggi-Log | Output DaMS x
> P EG [Dmensone buffer: 200
Hello Word!
Complimenti, hai realizzato il tuo primo programma in PL-SQL!
Prima di andare avanti vale la pena soffermarsi un minuto su quello che abbiamo appe
fatto.
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 813405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
* Quello che hai scritto é un blocco PL-SQL dove sono facilmente riconoscibili le sezior
DECLARE e BEGIN.
declare
1_message varchar? (5
begin
+ Nella sezione DECLARE abbiamo dichiarato una variabile di nome /_message e ne
abbiamo specificato il tipo ossia varchar2(500)
+ Nella sezione BEGIN abbiamo assegnato alla variabile | message un valore statico,
ossia la stringa Hello Word! e usando listruzione dbms_output put line abbiamo
stampato il valore della variabile L message
Nei paragrafi successivi andremo ad approfondire e estendere questi concetti
Sezione delle dichiarazioni
Dichiarazione delle Variabili
Tutte le variabili e le costanti (cosi come anche i cursori che vedremo tra poco) che vi
utilizzare allinterno di in un blocco PL/SQL devono essere dichiarate nella sezione
DECLARE del blocco.
Ricorda che una variabile dichiarata pud essere usata solo nel blocco all'interno del quale
stata dichiarata ed eventualmente nei sotto-blocchi annidati.
La sintassi generale per la dichiarazione delle variabili @ la seguente, dove la dichiarazio
del tipo pud essere opzionalmente seguita da una assegnazione di inizializzazione.
Ecco alcuni esempi standard di dichiarazioni di variabili.
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare05108122, 08:25 PProgrammare in PL-SQL: quid facle per princpiant
Pen enya
La variabile data_nascita é di tipo DATE mentre la variabile nome é di tipo VARCHAR2 con u
dimensione massima di 80 byte. La variabile ruolo @ stata inizializzata con un valore
default.
Finora abbiamo visto delle variabili definite con tipo dato standard (DATE, VARCHAI
BOOLEAN).
Tuttavia @ bene sapere che puoi definire delle variabili con tipi dati complessi, che dipendo
dinamicamente dal tipo di dato estratto delle tabelle.
Facciamo un esempio pratico: supponiamo che tu abbia definito nel database una tabella
anagrafica prodotti strutturata come segue.
td
SOT LCe
Peseta
Tata
mE
Se nel tuo programma PL-SQL vuoi salvare all'interno di una variabile i dati recuperati da u
query che interroga questa tabella devi scrivere un programma simile a questo:
Coee rere ae
ee eta me)
oem eros
Ee
cscs
Ti faccio notare che le variabili che hai dichiarato devono avere lo stesso datatype de
colonne della tabella, ovvero dovremo assicurarci che il tipo dato del campo e qu 9 de
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 013405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
nostra variabile siano compatibili se non equivalenti e che nel tempo non cambi. In ca
contrario il rischio @ che il programma possa andare in errore.
Il modo pit sicuro di fare cid @ quello di utilizzare le cosiddette dichiarazioni ancorate c
sono dichiarazioni in cui si fa esplicito riferimento al tipo di dato della colonna interessata.
Nel nostro caso, quindi, il programma pud essere scritto in questo modo
Sean
aes eae
Coombe
Cri
cae
ae cer aras
RR erate ete)
on
ici
oy
Possiamo anche dichiarare una variabile in grado di memorizzare tutto il record di u
tabella.
ante
Cee COO ae ere ace
eee Ce ba a
crc
Pe eee
caer
ie ees)
FROM
RS
ny
Dichiarazione dei Cursori
Un cursore @ una struttura che permette di scorrere le righe restituite da una query. E:
possono essere di sola lettura o, se 'implementazione lo consente, possono essere usati
modificare o cancellare le righe. 1
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 1109405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
Per poter utilizzare un cursore in un programma PL-SQL va prima di tutto dichiarato ne
sezione DECLARE usando la sintassi seguente:
See
Facciamo un esempio. Facendo sempre riferimento alla tabella PRODOTTO, supponiamo
voler fare delle operazioni sui prodotti che hanno un costo maggiore o uguale a 50 EUR
La definizione de cursore sara qualcosa di simile a questo:
a)
mena
Cae)
ae?
crn
Gy
Nell’esempio avrai notato una istruzione FOR: & uno dei modi che Oracle mette
disposizione per navigare un cursore.
Non @ unico ma @ sicuramente uno dei pit! comuni ed immediati; in ogni caso ne parlerer
tra poco.
Blocco di Programma
Dopo aver visto come dichiarare una variabile ed un cursore, possiamo concentrare
nostra attenzione sulla sezione di esecuzione di un blocco PL-SQL, owero dove andrai
scrivere le istruzioni che il tuo programma deve eseguire.
Prima di andare avanti é bene fare una precisazione.
In PL-SQL, come in altri linguaggi di programmazione, esistono centinaia di istruzioni c
combinate tra di loro permettono di fare praticamente qualsiasi tipo di elaborazione.
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare arsainsi, 08:25 Programmarein PL-SOL: ui faci per print
Vederle tutte in questo momento sarebbe impensabile. D’altro canto questa @ una Gui
Facile al PL-SQL per Principianti, no?
Per cui se vuoi apprendere al meglio ogni suo aspetto ti consiglio di consultare le guide
manuale che Oracle mette a tua disposizione.
Una punto di partenza @ il portale che Oracle mette a disposizione degli sviluppatc
raggiungibile a
Assegnazioni ed espressioni
Partiamo dalla cosa piu semplice da fare, ovvero come assegnare un valore ad una variabi
Listruzione @ molto semplice é pud essere fatta in due modi
I primo metodo consiste con loperazione di assegnazione diretta, tipicamente usata f
assegnare un valore di default, usando l'operatore :=
Nel seguente esempio ho dichiarato la variabile Lcosto_prodotto e l'ho inizializzata cor
valore 0
oan
Reem ecm
Coe
rer onc!
Tuttavia, spesso dovrai assegnare ad una variabile un valore usando una query. In ques
caso la sintassi é la seguente
saan
eee Soma
coae
ee
Pr ae aoe
Guy
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 19134ainsi, 08:25 Programmarein PL-SOL: ui faci per print
Cosi facendo |a nostra variable [costo_prodotto avra come valore il costo del prodot
identificato dalla query.
Per fare un operazione del genere dovremo essere cert, perd, che la query ritorni un uni
valore, altrimenti la nostra assegnazione andra in errore generando una eccezione ¢
causerebbe linterruzione del programma.
Per questo motivo, potrebbe aver senso gestire nel blocco le eccezioni che potrebbe
essere generate dal programma quando in una operazione di assegnazione non vie
restituito un solo valore.
Ecco come fare:
aoe
aaa
PaO a Mer Re ae eT
Pace a een na
rime
Nel frammento di codice che ti ho mostrato @ stato inserito la sezione opzionale EXCEPTIC
che permette di specificare quali istruzioni il programma deve eseguire qualora ven
generato un errore.
Nello specifico, ho gestito due casistiche particolari di errore:
+ no_data_found: la query non restituisce record
+ too_many_rows: la query restituisce piu di un record
hitpsifappinSminut.Yprogrammare-plsql-guida-per-prnciiantifPrima_d_iniare 40340510512, 08:25 Programmare in PL-SQL: guia facile per princpiant
In realta esistono tanti altri tipi di errore che un programma PL-SQL pud scatenare. F
questo motivo ho messo una terza casistica (others) che serve a specificare cosa deve far:
programma in tutti gli altri casi diversi da quelli gia gestiti
Per concludere, quando assegni una variabile puoi usare delle espressioni, costanti
operazioni aritmetiche in generale.
Alcuni esempi:
* counter ;
* counter := counter * 1.25;
* counter := counter + 1;
diff_costo := abs(costo_1 - costo_2)/Costo1;
nome_prodotto := ‘xyx’ I'abe"
Uso dei Cursori
Supponiamo tu voglia creare un programma che deve stampare a video I'elenco di tutt
prodotti che hanno un costo maggiore o uguale a 100 EUR
Non puoi sapere a priori quali sono i records da stampare; inoltre, questa informazione p
cambiare nel tempo quindi & necessario progettare un programma che sia in grado
assolvere a questo compito, indipendentemente dai dati
II PL/SQL mette a disposizione diversi strumenti che consentono di iterare una serie
records: quello pi comune @ il cursore dati.
Vediamo qualche esempio di utilizzo.
Cursori Semplici
Esistono due tipologie principali di cursore: | cursori semplici, che vediamo in ques
paragrafo, ed i cursori parametrici che tratteremo nel prossimo.
Procediamo con calma.
Prima di tutto, un cursore va dichiarato nella sezione DECLARE assegnandogli un ne~~
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 1513405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
La sintassi per dichiarare un cursore é questa
Seamer
Te eco iS
ra
Cao
Quindi, il cursore che useremo per stampare a video i prodotti che hanno un costo superic
a 100 EUR sara definito in questo modo:
See oe eae
ea
WHERE costo
CMa
Ti faccio notare che oltre alla dichiarazione del cursore ho inserito un‘altra istruzione
dichiarazione
Questa non é altro che la dichiarazione di una variabile di nome rec_elenco_prodotti che
servira successivamente per scorrere il cursore.
Per essere utilizzato, un cursore deve essere aperto, valorizzato ed infine chiuso.
Aprire un cursore comporta lesecuzione della query che abbiamo scritto nella s
definizione. Per eseguire questa operazione scriveremo questa istruzione
A seguito dell'istruzione di OPEN, il cursore sara inizializzato e possiamo scorrere le righe
questo modo:
to
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 1613405108122, 08:25 PProgrammare in PL-SQL: quid facle per princpiant
Pereira) eerie car
Listruzione LOOP / END LOOP serve per gestire un ciclo iterativo.
Listruzione FETCH serve per salvare il record corrente nella variabile rec_elenco_prodotti.
Una volta utilizzato, il cursore dovra essere chiuso nel seguente modo:
Pose
Ciera ge eo
Grae er ar Scary
eee Cs ca aC
ae eee ee
oes
ee eer
Cursori Parametrici
Quali e quanti record vengono restituiti da un cursore pud dipendere da valori costa
oppure da parametri.
hitpsifappinSminut.Yprogrammare-plsql-guida-per-prnciiantifPrima_d_iniare 11134Programmare in PL-SQL: guia face perp
Nell'esempio che abbiamo fatto poche righe sopra, la soglia dei 100 EUR @ un valc
costante fissato nella query del cursore.
Tuttavia, se volessimo sviluppare un programma che stampa quali sono i prodotti che han
un costo superiore ad un valore non stabilito a priori, dovremmo utilizzare un curse
parametrico.
Facciamo un esempio.
ear m
Sea
Cee ea ee eC nec!
Coe a ee
ORC)
One mE
eee CSC ea
aero
Peete eter!
Conca Teme ae Oe
Cieem ec ial ee era
one eee ee ee se ea
Sera
Gries
Nello script PL-SQL che ho riportato la query del cursore contiene questa condizione
Cee eee eee
p_soglia & un parametro, dichiarato nella definizione del cursore
Cv eae Tercaan NUMBER)
Se Ceara ae ee)
aa
sae Oo
Ppinminut.programmare-plsql-guide-per-prinepiantittPima_dl_Ingiare05108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
Ancora sui Cursori
Negli esempio che abbiamo fatto fino a questo punto, per usare un cursore & necessa
inserire le istruzioni per inizializzare il cursore, navigarlo ed infine chiuderlo: OPEN, FETC
CLOSE.
Se il tuo programma PL-SQL ha molte righe di codice, potrebbe essere interessante riusc
ad ottimizzarne la scrittura.
Ebbene, devi sapere che esiste un modo pill smart di navigare un cursore, usando in manic
opportuna listruzione FOR.
Ecco un esempio:
aan
Cee sie cy
Seema ied
ear)
Rr
coca
Coe
a Gaee a
Cn
oy
Il ciclo FOR dichiara implicitamente una variabile di tipo record che ha la stessa struttura ¢
cursore, apre il cursore, legge i valori e, infine, chiude il cursore quando sono ste
processate tutte le righe.
In pratica il ciclo FOR si occupa di tutte eseguire quelle operazioni di servizio (OPEN, FETCH
CLOSE) che altrimenti dovrebbero essere dichiarate in maniera esplicita,
Funzioni, Procedure e Packages
Creare una procedura in PL-SQL
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 9134ainsi, 08:25 Programmarein PL-SOL: ui faci per print
Fino a questo punto abbiamo parlato di programmi PL-SQL ma di fatto abbiamo semr
sctitto degli script che per eseguire le operazioni previste devono essere eseguiti nella Ic
interezza
Normalmente, perd, quello che fanno i programmatori @ scrivere il codice all'interno
programmi che hanno un nome, dei parametri e che possono essere eseguiti richiamando
il nome.
Una procedura PL-SQL é un blocco di codice, identificato da un nome univoco, che
salvata (in gergo si dice compilata) direttamente nel database Oracle
Una procedura PL-SQL pud essere richiamata da altri blocchi PL/SQL, da altre procedure e
altre funzioni utilizzando direttamente il suo nome, rendendola di fatto riutilizzabile dove ¢
cipiace
In questo modo se la tua APP Oracle APEX deve richiamare da pill punti lo stes
programma PL-SQL, non dovrai riscrivere ogni volta il codice nella sua totalita. Sz
sufficiente compilare una sola volta la procedura e richiamarla attraverso il suo nome do
serve.
La sintassi per creare una procedura PL-SQL é la seguente:
ge
Andiamo ad analizzarla un po’ piti nel dettaglio
* CREATE PROCEDURE, obbligatoria, indica che stiamo definendo una procedura;
+ Laclausola OR REPLACE, opzionale, serve per ricreare la procedura nel caso in cui ess
sia gia stata definita in precedenz
+ , obbligatoria, indica il nome con cui la procedura sara identificata;
+ , opzionale, consente di inserire una serie di parametri che possono
essere passat alla procedura.
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 2ovs40510512, 08:25 Programmare in PL-SQL: guia facile per princpiant
Volendo fare subito un esempio concreto, la procedura che stampa a video gli articoli con
costo superiore ad un determinato valore sara
one ee ea este SECM)
ieee er came
eer ee
aC
ere
Cooa)
FOR rec
rr
Tne
fy
dove tipo_dato indentifica il tipo di parametro che la procedura si aspetta.
Valori classici sono VARCHAR2 oppure NUMBER (possono essere usati anche tipi de
complessi ma per il momento direi che va bene cosi).
Lunico punto di attenzione nella definizione dei parametri @ che non va specificata
dimensione o la precisione (nel caso dei NUMBER)
Ad esempio, se scrivessimo come tipo dato VARCHAR2(30) avremmo un errore in fase
compilazione: si deve specificare semplicemente VARCHAR2
La clausola IN, OUT, IN OUT, opzionale, specifica il modo nel quale il parametro é utilizza
Per default, I'utilizzo di un parametro é in modalita IN.
+ IN implica che il parametro pud essere utilizzato nella procedura ma non pud essere
modificato;
+ OUT implica che ad esso pud essere assegnato un valore nella procedura ma non pue
essere utilizzato;
+ IN OUT implica che il parametro pud essere utilizzato sia in lettura che scrittura.
La clausola /S sostituisce, in sostanza, la DECLARE vista in precedenza. Di qui in av~
quanto gia visto nella trattazione dei blocchi
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 2110405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
Una procedura pud essere richiamata utilizzando il comando CALL nel seguente modo:
oppure allinterno di un altro blocco PL-SQL in questo modo:
croc
eee eee
Gy
‘Ad esempio, questo @ un modo per richiamare la nostra procedura stampa_articoli_costosi.
BEGIN
ent
ol asec ec
uy
Una procedura pud essere eliminata tramite il comando DROP nel seguente modo:
Creare una funzione in PL-SQL
La dico in modo semplice perché di fatto é cosi: una funzione PL-SQL si differenzia da u
procedura solo per la presenza di una clausola RETURN che specifica il tipo di de
restituito.
A differenza di una procedura, infatti, una funzione restituisce sempre un valore.
La sintassi della definizione di una funzione é la seguente:
oe one eee ear cra ata eee
SCTE
Carne
Cama
Pera oO
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_di_iniiare05108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
—_—_
Supponiamo di voler scrivere un programma PL-SQL che conta il numero di articoli
hanno un valore superiore ad un determinato importo e, allo stesso tempo, vogliar
stampare a video questa lista.
Possiamo utilizzare una funzione PL-SQL definita cosi:
ee ee ee eee eat ee Cece ORs a ae
Cee cnec)
eee arate?
ear)
rae
Re
Coe)
tac er aa)
re ae se CO eee
are ee)
CTR
cera
ar
Come puoi vedere, le differenze tra procedura e funzione sono dawero pochissime.
+ CREATE FUNCTION, obbligatoria, indica che stiamo definendo una funzione.
+ Laclausola OR REPLACE, opzionale, serve per ricreare la funzione nel caso in cui esse
gia stata definita in precedenza.
+ Laclausola , obbligatoria, indica il nome con cui la funzione sara
identificata.
+ Laclausola [()], opzionale, consente di inserire una serie di parametri
che possono essere passati alla funzione.
Anche una funzione PL-SQL pud essere richiamata da un blocco PL-SQL. Un esempio
questo:
Saat
pee Stem
Caoel
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare05108122, 08:25 PProgrammare in PL-SQL: quid facle per princpiant
Creare un package in PL-SQL
Un package PL-SQL non introduce funzionalita particolari. Lo puoi considerare altresi cor
una raccolta di oggetti PL-SQL come funzioni, procedure, variabili, ecc.
Lutilita di un package sta nel fatto che consente di organizzare concettualmente i sing
programmi PL-SQL in una sorta di libreria.
Per creare un package PL-SQL dovremo prima di tutto salvare le sue specific
(specification) e successivamente potremo compilamne il corpo (body).
Questa é la sintassi per dichiarare le specifiche di un package
oa ogee eee
eRe ee
esc nes
Le specifiche contengono la parte pubblica del package, quindi accessibile a tutte
applicazioni
Il body, invece, nasconde la parte implementativa, le variabili e gli oggetti privati. Questa &
sintassi per dichiarare il corpo di un package:
oe ee ee eer eee
eR ae
eT ere ee
eet
BEGIN
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare05108122, 08:25 PProgrammare in PL-SQL: quid facle per princpiant
eae
Ey
Nel body del package andrai a scrivere il codice del programma cosi come avresti fatto r
caso di una procedura standalone.
Cid che devi tenere a mente é che la dichiarazione della funzione o procedura nel body de
essere esattamente identica a quella delle specifiche e che tutte le procedure e fun:
dichiarata nelle specifiche deve essere implementate nel body.
Facciamo un esempio pratico.
Supponiamo, ad esempio, di voler creare un package per la gestione dell'anagrafica prodc
e di voler includere 3 procedure. Una procedura che consente di creare un nuovo prodot
una procedura che consente di aggiornare le informazioni di un prodotto ed una procedt
che consente di eliminare un prodotto
Questa é la definizione delle specifiche
Carre
Cea S SO aE
STs
EER CR CTC
ar Om
Pee ease eee me Coe
ST
D SSCS
Pat} SO
ee Ce aC er ema)
eee ae
Questo @ il body del package
eee eee ey oe ed
PROCEDURE Rone at ee erat Oe Cee
ce
SoC
ST)
cy
BEGIN
pC OLR Gr eae te ea)
VALUES (p_id, p_descrizione , p_fornitore, p_costo);
ona
IitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiarePProgrammare in PL-SQL: quid facle per princpiant
ee ee ase era Coe
0 ST
OM?
ST)
Is
BEGIN
Tae
Cee ae oer
Pra
Crna
a
ee ee as er me)
Py
ceca
Pen
COMMIT;
EH
eee se ae
Per fare riferimento ad un oggetto (pubblico) che si trova all'interno del package & necessa
anteporre al nome dell’oggetto quello del package, separati da un punto
Questo vuol dire che per richiamare la procedura create_product dichiarata nelle specific
del package dovrai scrivere qualcosa di simile a questo:
BEGIN
Pr eee eC ee ee ree De eae
END;
Strutture condizionali in PL/SQL
In tutti gli esempi che abbiamo visto finora i programmi che abbiamo creato eseguono
istruzioni in rigida sequenza.
Eppure il PL-SQL permette di scrivere del codice molto pi complesso ed efficiente.
In questo paragrafo vedremo alcuni degli operatori condizionali pits comuni, utili per esegu
delle istruzioni piuttosto che altre a seconda dei valori assunti da alcune condizioni
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 26104ainsi, 08:25 Programmarein PL-SOL: ui faci per print
Questi costrutti (detti costrutti condizionali) vengono utilizzati per controllare il flusso
elaborazione della nostra sequenza di istruzioni indirizzandolo in un modo, piuttosto che
un altro, a seconda del verificarsi o meno di certe condizioni
II pi semplice e pit intuitivo, anche per chi ha una piccola esperienza di programmazione
il costrutto IF
Esso si compone delle seguenti parole chiave: If, Then, Else/Elsif, End If.
La forma pit semplice in cui lo si andra ad utilizzare é:
ea ras
Vediamo di comprendere il significato di questo frammento di codice.
In sostanza, se la condi:
ne @ verificata (TRUE) viene eseguita listruzione (0 il blocco
istruzioni) che si trovano tra la clausola THEN e la clausola END IF.
Leggermente piu! complessa @ la forma del tipo:
coeur
corres
Rispetto al primo esempio, vediamo che si é aggiunta una nuova clausola: ELSE.
Se la condizione @ verificata (TRUE) verra eseguita listruzione (blocco di istruzioni) che
trovano dopo la clausola THEN, altrimenti, se la condizione non si verifica (FALSE) oppure
NULL, verra eseguita lstruzione (blocco di istruzioni) che si trovano dopo la clausola ELSE
In tutti i casi, il flusso riprende normalmente al primo comando successivo alla clausola Et
IF.
Di seguito, un piccolo esempio
hitpsifappinSminut.vprogrammare-plsql-guida-per-principlantifPrima_<_inizare 27134Programmare in PL-SQL: guia facile per pr
PEO eo
ar OER Talo) era
Ten eee
emcees 0) ee ao a Cr
eC at) ee Ta
Vediamo ora una versione maggiormente articolata che sfrutta anche la clausola ELSIF:
Roars
ease
Pee reaced
eee eey
Sead
Conrad
erates
Il significato di questo codice e facilmente intuibile sulla base di quanto detto fino a ques
momento: se si verifica la viene eseguita I’ se si verifi
viene eseguita I' e cosi via
Sulla stessa falsariga di quanto appena visto @ il costrutto CASE. La sintassi é del tipo:
eer anes
Conrad
eee oeeey
Porras
Sees eae
Cora
erred
Sebbene possa sembrare alquanto differente, in sostanza esso non fa che prendere
esame una variabile su cui poi valuta le condizioni
Ppinminut.programmare-plsql-guide-per-prinepiantittPima_dl_Ingiareainsi, 08:25 Programmarein PL-SOL: ui faci per print
Verra eseguita listruzione (il blocco di istruzioni) che si trova dopo la condizione che risu
verificata.
Gestire le eccezioni in PL/SQL
Quando alfinterno del nostro blocco PL/SQL si verifica un errore viene scatene
un’eccezione. Le eccezioni possono essere distinte in due tipi:
+ Eccezioni di sistema
* Eccezioni utente
Eccezioni di sistema
Gli errori pid generici che si possono verificare durante l'esecuzione di blocchi PL/S!
vengono gestiti dalle eccezioni di sistema
Esse si scatenano automaticamente quando si verificano specifici errori previsti da Orac
Le eccezioni utente invece devono essere esplicitamente definite e poi attivate «
programmatore
Vediamo di seguito la sintassi delle eccezioni:
Abbiamo una sezione del blocco dedicata alle eccezioni; ogni qualvolta si verifica u
eccezione, tramite le clausole WHEN viene individuata quella del tipo verificatosi in modo t:
da eseguire il codice pit opportuno alla sua gestione.
Dato che non sempre @ possibile determinare tutte le eccezioni che si possono verificarc
seguito dell’esecuzione del nostro codice, il PL/SQL mette a disposizione la clausc'~"“Hi
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare pers0510512, 08:25 Programmare in PL-SQL: guia facile per princpiant
OTHERS la quale gestisce, appunto, tutte le eccezioni non esplicitamente trattate da
clausole che la precedono.
Una clausola WHEN pud anche gestire pit eccezioni, avremo quindi qualcosa del genere:
Di seguito, un piccolo elenco delle eccezioni di sistema pit! comuni
+ NO_DATA_FOUND - un comando SELECT o FETCH non ha restituito nessuna tupla
* TOO_MANY_ROWS - una SELECT INTO ha restituito pili di una tupla
+ ZERO_DIVIDE - é stata tentata una divisione per 0
Vediamo adesso un semplice esempio che fa uso dell’eccezione NO_DATA_FOUND:
Pag Coe ee a ee
occa
Pm CM
Uae ORR Corey ar An Eos
Ceo
cane
ce
Eccezioni utente
Come gia accennato in precedenza, PL/SQL permette di definire delle exception prop
dell'utente.
Come per qualsiasi altra dichiarazione, essa deve awenire nella sezione di dichiarazior
Avremo quindi:
San
Ecsta
Le eccezione definite dallutente non scattano automaticamente ma devono esse
scatenate tramite il comando RAISE seguito dal nome dell’eccezione, quindi, nel no: & ca
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 301s05108122, 08:25
avremo
PProgrammare in PL-SQL.: quid facle per princpiant
Vediamo un esempio completo:
aan
eo eee
cae
eae
rear
cian
Cxeaasc
Deets ea eta
aera) ere a eee
Ea cea)
Teer a
oy
Conclusioni
Bene, siamo arrivati alla fine di questo breve (ma decisamente intenso) excursus <
linguaggio PL-SQL.
Mi auguro di averti aiutato a comprendere un po’ meglio le sue caratteristiche. Ades
dovresti avere in mano gli strumenti e le conoscenze di base necessarie per iniziare
sviluppare.
Essendo un importante linguaggio di programmazione, @ ampiamente utilizzato da
sviluppatori nello sviluppo di applicazioni moderne
Condividi questo articolo se ti @ piaciuto e se hai domande o hai bisogno di qualc
approfondimento, fammelo sapere nei commenti!
Un abbraccio
Daniele
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare
3113405108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
TI POTREBBE INTERESSARE:
Product Configurator in Oracle APEX
Come costruire Form Dinamiche in Oracle APEX (Dynamic Layout + APEX_ITEM)
Come gestire i files su Object Storage da Oracle APEX
+ Oracle APEX: visualizzare messaggi di errore personalizzati da PL/SQL
Come sviluppare applicazioni sicure con Oracle APEX
Dashboard Interattiva in Oracle APEX
LASCIA UN COMMENTO
I tuo indirizzo email non sara pubblicato. | campi obbligatori sono contrassegnati *
Commento *
Nome *
Email *
Do il mio consenso affinché un cookie salvi i miei dati (nome, email, sito web) peril prossimo commento.
x
Ms)
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare
3213405108122, 08:25
PProgrammare in PL-SQL: quid facle per princpiant
BENVENUTO!
Il mio nome @ Daniele Trasarti, autore di
APPinSMinuti, il blog italiano che parla di
piattaforme e applicazioni low-code.
Qui troverai tantissimi tutorial e risorse per
imparare a sviluppare in pochissimo tempo
bellissime applicazioni per gestire i dati ed i
processi della tua azienda.
Pensi di non essere in grado? Perché non provi
adesso a creare [a tua prima applicazione in 5
sett?
Fidati, non dovrai scrivere nemmeno una riga di
codice!
‘SEGUIMI SUI SOCIAL!
NEWSLETTER
RoC Cece Cue
Pea a UCR Re
Cre il mesa)
Ne TU ESSUF
COMMENTI RECENTI
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare05108122, 08:25 PProgrammare in PL-SQL.: quid facle per princpiant
chadwick su Oracle APEX: Workflow Manager con
Flows for APEX
Daniele Trasarti su Come creare un servizio REST
in Oracle APEX
fabio su Come creare un servizio REST in Oracle
APEX
Daniele Trasarti su Applicazione di Prenotazione
Appuntamenti in Oracle APEX
Francesca su Applicazione di Prenotazione
Appuntamenti in Oracle APEX
Daniele Trasarti su Google AppSheet: come
gfeare una APP Mobile da un foglio Excel in 5
minuti
nicola su Google AppSheet: come creare una APP
Mobile da un foglio Excel in 5 minuti
Bhavin Adhvaryu su Come sviluppare applicazioni
sicure con Oracle APEX
Daniele Trasarti su Come chiamare un servizio
REST in Oracle APEX
Alessandro su Come chiamare un servizi
in Oracle APEX
Bona Bo
HitpsstappinSminut.tvprogrammare-plsql-guide-per-principianti#Prima_dl_iniiare 34034