Sei sulla pagina 1di 34
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 2134 osins22, 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 ssa osins22, 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 4134 ainsi, 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_iniiare 05108122, 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 ane 05108122, 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 8134 05108122, 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_iniiare 05108122, 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 0134 05108122, 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 11094 05108122, 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 ars ainsi, 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 19134 ainsi, 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 4034 0510512, 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 15134 05108122, 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 16134 05108122, 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 11134 Programmare 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_Ingiare 05108122, 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 9134 ainsi, 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 2ovs4 0510512, 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 21104 05108122, 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_iniiare 05108122, 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_iniiare 05108122, 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_iniiare 05108122, 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_iniiare PProgrammare 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 26104 ainsi, 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 27134 Programmare 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_Ingiare ainsi, 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 pers 0510512, 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 301s 05108122, 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 31134 05108122, 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 32134 05108122, 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_iniiare 05108122, 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

Potrebbero piacerti anche