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:

Pubblicitร 
  • 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ร