Questo sito contribuisce alla audience di

Il linguaggio pl/sql - sesta parte

Procedure e Funzioni

Quando si scrive del codice, a prescindere dal linguaggio utilizzato, si tende a dividere grossi blocchi di istruzioni in moduli piu’ piccoli, per diversi motivi, come ad esempio una migliore leggibilita’, possibilita’ di riutilizzare il codice scritto, maggiore manutenibilita’ etc.

Il linguaggio pl/sql offre diverse strutture per modularizzare il codice, oltre ai blocchi anonimi visti in precedenza esistono:

Procedure
Funzioni
Package

Procedure e funzioni non sono altro che blocchi anonimi con un nome ai quali e’ possibile passare valori in input sotto forma di parametri e che, nel caso delle funzioni, restituiscono anche un valore in output.

I package raggruppano funzioni e procedure.

Prima di descrivere in dettaglio le tre strutture vediamo le diverse tipologie di parametri che possono essere passati alle funzioni e alle procedure, intesi non come datatype (numerici, stringhe o date) ma come modalita’ di utilizzo del parametro da parte della procedura.

Le tre diverse modalita’ sono:

IN

OUT

IN OUT

I parametri di tipo IN permettono di passare un valore al modulo che lo puo’ utilizzare ma non modificare, si tratta in pratica di un valore costante. E’ la modalita’ di default.

I parametri di tipo OUT, sono invece parametri di solo output, quindi il loro valore non puo’ essere utilizzato dal modulo ma vengono usati per restituire un valore al chiamante. E’ come se si trattasse di variabili non inizializzate utilizzate all’interno del modulo e restituite da quest’ultimo valorizzate.

I parametri IN OUT combinano le caratteristiche dei due, quindi possono essere utilizzati sia come input che output.

Come esempio consideriamo tre variabili numeriche x, y e z ed una procedura f con tre parametri numerici, il primo di tipo IN, il secondo OUT e il terzo IN OUT:

x := 1;

y := 2;

z := 3;

f(x,y,z);

f(1,y,z);

f(x,2,3); — errore!

L’ultima istruzione richiama la funzione passando x in corrispondenza del parametro IN (e questo e’ ok, in quanto il valore di x puo’ essere usato all’interno della funzione senza pero’ essere modificato) mentre i due parametri successivi che sono OUT e IN OUT devono essere variabili in modo da contenere il valore di ritorno.

Le altre due chiamate (che sono equivalenti) sono corrette. Nella prima, ad esempio, sono passate tre variabili: x di solo input, y di solo output (di conseguenza l’inizializzazione a 2 viene persa al momento della chiamata) e z che vale ancora 3 al’interno della funzione.

continua…

Le categorie della guida