back to top

Creare una procedura in PL/SQL – Guida Oracle

In PL/SQL, si definisce procedura un blocco di codice dotato di un nome attraverso cui viene salvato e può essere richiamata da altri blocchi PL/SQL, da altre procedure e da altre funzioni. La sintassi per la definizione di una procedura è la seguente:

CREATE [or REPLACE] PROCEDURE <nome_procedura> [(<lista di parametri>)] IS
<dichiarazione>
BEGIN
  <sequenza di istruzioni>
  [exception
  <routine di gestione dell''eccezione>]
END [<nome procedura>];

Andiamo ad analizzare le clausole in essa presenti:

  • La CREATE PROCEDURE, obbligatoria, indica che stiamo definendo una procedura;
  • La [or REPLACE], opzionale, serve per ricreare la procedura nel caso in cui essa sia già stata definita in precedenza;
  • La <nome_procedura>, obbligatoria, indica il nome con cui la procedura sarà identificata;
  • La [(<lista parametri>)], opzionale, consente di inserire una serie di parametri che possono essere passati alla procedura.

In pratica è una sequenza del tipo:

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

dove tipo_dato non deve specificare lunghezza, precisione o scala in quanto essi vengono derivati dall”ambiente da cui la procedura viene richiamata. Ad esempio, avremo errore se dovessimo scrivere come tipo dato varchar2(30 byte) che dovremo, invece, specificare semplicemente come varchar2. La clausola IN, OUT, IN OUT, opzionale, specifica il modo nel quale il parametro è utilizzato. Per default, l”utilizzo di un parametro è in modalità IN.

  • IN implica che il parametro può essere utilizzato nella procedura ma non può essere modificato;
  • OUT implica che ad esso può essere assegnato un valore nella procedura ma non può essere utilizzato;
  • IN OUT implica che il parametro può essere utilizzato sia in lettura che scrittura.

La clausola IS sostituisce, in sostanza, la DECLARE vista in precedenza. Di qui in avanti, vale quanto già visto nella trattazione dei blocchi.

Una procedura può essere richiamata utilizzando il comando CALL nel seguente modo:

CALL nome_procedura([lista parametri]);

Una procedura può essere eliminata tramite il comando DROP nel seguente modo:

DROP nome_procedura;

Un esempio di procedura in PL/SQL

Supponiamo di voler effettuare una modifica alla nostra tabella di "Anagrafica" volendo aumentare lo stipendio degli assunti con ruolo di impiegato. Un semplice esempio di procedura, adatta a raggiungere il nostro scopo, potrebbe essere il seguente:

CREATE PROCEDURE aumento_salariale (ruolo varchar2, percentuale number default 1) IS
BEGIN
  UPDATE Anagrafica 
  SET Stipendio = Stipendio * percentuale 
  WHERE Ruolo = ruolo;
END;

Se dall”interno del nostro blocco la attiviamo così:

CALL aumento_salariale('Impiegato',1.1);

otterremo che per ogni record in anagrafica avente ruolo di impiegato lo stipendio sarà maggiorato del 10% (questo aumento percentuale si ottiene con una moltiplicazione dello stipendio attuale per 1.1). Si noti che avendo utilizzato la clausola default nella definizione della variabile numerica "percenuale", avremo che se non dovessimo passare tale valore nella nostra chiamata, la procedura utilizzerà il valore 1 come default.

PubblicitÃ