Tutte le variabili e le costanti (cosรฌ come anche i cursori che vedremo in seguito) utilizzate in un blocco PL/SQL devono essere necessariamente dichiarate nella relativa sezione di dichiarazione. Prima di soffermarci sui formati di dichiarazione specifici ecco alcune regole generali per la dichiarazione di variabili e costanti:
- devono iniziare con un carattere
- possono contenere sia maiuscole che minuscole
- devono avere lunghezza massima pari a 30 caratteri
- non devono contenere spazi
- non possono coincidere con parole riservate
- la dichiarazione termina (come ogni istruzione) col punto e virgola
Di seguito ecco la dichiarazione tipo:
<nome_variabile> [costant] <tipo di dati> [not null] [:=<espressione>];
Per il nome_variabile abbiamo giร dato le relative regole.
La clausola costant, come รจ facile intuire, indica se si tratta di una costante, nel qual caso una volta che viene assegnato un valore esso non potrร piรน essere cambiato.
I tipi di dato, sono sostanzialmente i classici del SQL, quindi potremo avere varchar2, number, date, boolean.
La clausola not null indica che non puรฒ essere assegnato un valore null. Si noti che qualora la variabile venga solo dichiarata ma ad essa non viene assegnato alcun valore, il valore null sarร assegnato di default.
Lโespressione รจ un valore corrispondente al tipo di dato asegnato alla variabile/costante; essa deve essere preceduta da :=.
Di seguito qualche esempio di dichiarazione:
DECLARE
data_assunzione date;
nominativo varchar2(80 byte);
stage boolean;
qualifica varchar2(20 byte) := 'Impiegato';
BEGIN
...
...
...
END;
Un altro modo per assegnare un valore ad una variabile รจ quello di farlo attraverso una query. Supponiamo di avere la nostra tabella "Anagrafica" e di eseguire la seguente query:
SELECT Nome
FROM Anagrafica
WHERE Cognome = 'Rossi';
Il risutato della nostra SELECT sarร il valore "Mario". Qualora avessimo voluto assegnare questo valore ad una variabile avremmo utilizzato un codice simile a questo:
DECLARE
mio_nome varchar2(30 byte);
BEGIN
SELECT Nome
INTO mio_nome
FROM Anagrafica
WHERE Cognome = 'Rossi';
END;
cosรฌ facendo la nostra variable "mio_nome" avrร come valore "Mario".
Per fare un operazione del genere dovremo essere certi, perรฒ, che la query ritorni un unico valore, altrimenti la nostra assegnazione andrร in errore.
Finora abbiamo visto i tipi di dato, per cosรฌ dire, "classici", ne esiste, tuattavia, un altro, cui si ricore piuttosto frequentemente in PL/SQL in quanto consente di gestire piรน facilmente i dati estratti dinamicamente dalle nostre tabelle. Supponiamo, come abbiamo fatto sopra, di voler assegnare ad una variabile il valore restituito da una query. Affinchรจ tutto vada a buon fine dovremo assicurarci che il tipo dato del campo e quello della nostra variabile siano compatibili se non equivalenti; dovremo altresรฌ accertarci che questo non cambi nel tempo. Il modo piรน sicuro di fare ciรฒ รจ quello di utilizzare le cosiddette dichiarazioni ancorate che sono dichiarazioni in cui si fa esplicito riferimento al tipo di dato della colonna interessata. Nel nostro caso
Anagrafica.Nome%TYPE
si riferisce al tipo di dato della colonna "Nome" della tabella "Anagrafica".
Possiamo anche dichiarare un record atto a memorizzare una tupla completa di una determinata tabella, ovvero, nel nostro caso
Anagrafica%ROWTYPE
รจ un record adatto a memorizzare tutti i valori di una riga completa (non di un singolo campo) della tabella Anagrafica.