ASPITALIA.IT

Sito dedicato alla tecnologia web di Microsoft. Da ASP a ASP.NET trovate articoli e tutorial interessanti adatti anche a chi si av...

Leggi la Descrizione
HTML.IT

Uno dei migliori siti di programmazione presenti sul Web. Se volete iniziare a programmare in qualsiasi linguaggio, html.it &egrav...

Leggi la Descrizione
YoungPortal.it

Portale ricco di risorse per sviluppatori Delphi, asp.net, java. Da poco attiva la nuova sezione SUBSONIC che cerca di andare inco...

Leggi la Descrizione
TIPI DI VARIABILI COMPOSTI PL/SQL

Visitatori: 1957

Nella scorsa lezione abbiamo visto l'operatore di assegnazione ':='. Tuttavia non è l'unico modo di assegnare un valore ad una variabile in PL/SQL.

Un metodo molto utilizzato è quello di assegnare ad una variabile il risultato restituito da istruzione SELECT.

Esempio 1

DECLARE

           nome VARCHAR(30);

           ...

BEGIN

           SELECT nome_studente

           into nome

           FROM STUDENTI

           WHERE id_studente=1;
END;

Nell'esempio viene ricavato il nome dello studento con id_studente=1 e assegnato alla variabile nome.

Uso degli attributi per la dichiarazione delle variabili

Nell'esempio sopra abbiamo dichiarato la variabile nome come VARCHAR(30), presumendo che sul database il campo nome_studente sia dello stesso tipo o di un tipo compatibile.

Quando non conosciamo a priori il tipo di dato è possibile utilizzare l'attributo %TYPE che PL/SQL ci mette a disposizione. Vediamo un esempio concreto:

Esempio 2

DECLARE

           nome nome_studente.STUDENTI%TYPE; //Colonna.TABELLA%TYPE

           ...

BEGIN

           SELECT nome_studente

           into nome

           FROM STUDENTI

           WHERE id_studente=1;
END;

In questo esempio abbiamo ricavato il tipo di variabile direttamente dalla colonna corrispondente della tabella studenti. L'utilizzo dell'attributo %TYPE è molto comune in PL/SQL e deve essere ben compreso.

TIPI COMPOSTI PL/SQL

PL/SQL mette a disposizione degli sviluppatori tipi di dati composti che facilitano la memorizzazione di dati che hanno una struttura complessa. Il concetto di RECORD viene spesso associato a quello di TUPLA ovvero riga di una particolare tabella, anche se il concetto di RECORD è più generico in quanto lo sviluppatore può definire un proprio tipo RECORD non necessariamente corrispondente alla struttura di una riga della tabella.

Esempio 3 - Tipo RECORD

Un RECORD rappresenta un insieme di dati logicamente correlati memorizzati in diversi campi, ognuno con un tipo di dato specifico:

La sintassi per la dichiarazione di un tipo RECORD è la seguente:

TYPE nome_rec IS RECORD (campo1, datatype [,campo2 datatype]…;

Esempio 4

DECLARE

           TYPE mio_studente IS RECORD

             (nome VARCHAR(30),

            cognome VARCHAR(30),

            data_nascita DATE);

            studente mio_studente;

           ...

BEGIN

           ...


END;

Nell'esempio sopra abbiamo dichiarato un nostro tipo RECORD attraverso la parola chiave TYPE e successivamente abbiamo dichiarato una variabile "studente" di tipo "mio_studente".

Tuttavia questo non è l'unico modo di creare dati di tipo RECORD. PL/SQL ci viene in aiuto mettendo a dosposizione un costrutto molto semplice per creare tipi RECORD a partire dalla struttura di una TABELLA. Per esempio se volessimo creare un tipo RECORD che riproduce esattamente i dati di una riga della tabella STUDENTI scriveremo:

Esempio 5 - L'attributo %ROWTYPE

DECLARE

           ...

            studente STUDENTI%ROWTYPE;

           ...

BEGIN

           ...


END;

L'attributo %ROWTYPE permette quindi di dichiarare esplicitamente un tipo RECORD che ha la stessa struttura di una TABELLA del database.

Accesso ai Campi di un RECORD

In entrambi i casi per accedere ai campi di un tipo RECORD si usa la sintassi:

nome_record.nome_campo

quindi anche per assegnare il valore ad un campo scriveremo nel nostro blocco PL/SQL:

nome_record.nome_campo := valore;

Nella prossima lezione vedremo l'utilizzo dei CURSORI.

Lezione precedente | Indice degli articoli | Lezione successiva