back to top

Creare una funzione in PL/SQL – Guida Oracle

In PL/SQL si definisce funzione un blocco di codice dotato di un nome attraverso il quale viene salvata e può essere richiamata da altri blocchi PL/SQL, da altre procedure e da altre funzioni.

Le funzioni, del tutto simili alle procedure, si differenziano da queste per la RETURN che specifica il tipo di dato restituito, infatti esse restituiscono sempre un valore. La sintassi della definizione di una funzione è la seguente:

<strong>CREATE</strong> [or REPLACE] <strong>FUNCTION</strong> <<strong>nome_funzione</strong>> [(<lista di parametri>)] <strong>RETURN</strong> <<strong>tipo dato</strong>> IS
<dichiarazione>
BEGIN
  <sequenza di istruzioni>
  RETURN <variabile>
  [exception
  <routine di gestione dell'eccezione>]
END [<nome funzione>];

Come di consueto andiamo ad analizzare la sintassi: La clausola CREATE FUNCTION, obbligatoria, indica che stiamo definendo una funzione. La clausola [or REPLACE], opzionale, serve per ricreare la funzione nel caso in cui essa è già stata definita in precedenza. La clausola <nome_funzione>, obbligatoria, indica il nome con cui la funzione sarà identificata. La clausola [(<lista parametri>)], opzionale, consente di inserire una serie di parametri che possono essere passati alla funzione. In pratica è una sequenza del tipo:

<nome_parametro> [IN | OUT | IN OUT] <tipo_dato>

In merito a tale sequenza valgono le stesse osservazioni viste nella lezione precedente dedicata alle procedure. La clausola RETURN, <tipo dato> specifica il tipo di dato che la funzione dovrà restituire. La clausola IS assolve, come nelle procedure, una funzione analoga alla clausola DECLARE vista in precedenza. Per il resto vale quanto già visto nella trattazione dei blocchi.

Una funzione, come la procedura, può essere richiamata utilizzando il comando CALL nel seguente modo:

<strong>CALL nome_funzione</strong>([lista parametri]);

Anche le funzioni possono essere eliminate tramite il comando DROP nel seguente modo:

<strong>DROP nome_funzione</strong>;

Un esempio pratico di funzione PL/SQL

Supponiamo, di voler effettuare una query sulla nostra tabella di "Anagrafica" al fine di calcolare l’ammontare totale degli stipendi che dovranno essere erogati ogni mese. Un semplice esempio di funzione preposta a tale compito potrebbe essere il seguente:

CREATE FUNCTION totale_stipendi() RETURN number IS
  tot_stipendi number := null;
BEGIN
  SELECT sum(stipendio) INTO tot_stipendi FROM Anagrafica;
  RETURN tot_stipendi;
END;

Per utilizzarla, all’interno del nostro blocco dovremo avere qualcosa del tipo:

DECLARE
  totale_stipendi_mensile number;

BEGIN
  Totale_stipendi_mensile := totale_stipendi();

END;

Sostanzialmente, la differenza con le procedure è che il risultato di una chiamata di funzione deve essere assegnato ad una variabile appositamente definita.

Pubblicitร