Oracle Lessons

Lezioni Pratiche in Italiano

Creato da Pietro_Bonfigli il 11/03/2009

Area personale

 

Tag

 

Archivio messaggi

 
 << Luglio 2024 >> 
 
LuMaMeGiVeSaDo
 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
 
 

Cerca in questo Blog

  Trova
 

FACEBOOK

 
 

Ultime visite al Blog

marcop1973pixfaxhellingen666RiukaTerzo_Blog.GiusFDMDMFqwerty_alnicola.cambaraFilippoPaganellifrancocapoluanadiciommoaleale78alebherryraffaelesoldanoio_brina
 

Chi puņ scrivere sul blog

Solo l'autore puņ pubblicare messaggi in questo Blog e tutti gli utenti registrati possono pubblicare commenti.
 
RSS (Really simple syndication) Feed Atom
 
 

 

« Oracle Tipi Dati Astratt...Oracle Tipi Dati Astratt... »

Oracle Tipi Dati Astratti Lezione 2

Post n°28 pubblicato il 12 Agosto 2010 da Pietro_Bonfigli
 

 Uso dei Tipi Semplici.

I tipi semplici (o distinct type) sono la forma più semplice di estensione del sistema dei tipi fornita da un ORDBMS, consentono agli utenti di creare nuovi tipi di dati, basati su un solo tipo (built-in o user-defined);

Inoltre:

  • Sono usati per definire tipi di dati che richiedono operazioni diverse rispetto al tipo su cui sono definiti;

  • Sono considerati dal DBMS totalmente distinti dal tipo su cui si basano;

  • I valori del tipo semplice non sono direttamente confrontabili con quelli del tipo su cui si basano (strong typing);

  • I confronti con il tipo base o con altri tipi semplici definiti sullo stesso tipo base richiedono operazioni di cast;

  • l’ORDBMS crea automaticamente una funzione di cast quando un nuovo tipo di dati semplice viene creato;

  • Non è fornito alcun meccanismo di ereditarietà e subtyping per i tipi semplici;

Si supponga di creare un nuovo tipo id_impiegato basato sul tipo intero:

Come il tipo intero, id_impiegato è utilizzato per memorizzare valori numerici ma il DBMS tratterà i due tipi come tipi distinti.

Per i due tipi possono essere definite operazioni diverse (ad esempio la somma di due identificatori non ha senso, mentre potrebbe essere utile una operazione di confronto).

SQL-99 consente di definire tipi semplici, basati solo su tipi built-in utilizzando la clausola:

CREATE TYPE is varray(<limit>) of ;


La definizione del tipo id_impiegato può essere la seguente:


CREATE TYPE id_impiegato is varray(1) of INTEGER;


CREATE TABLE Impiegati(

id id_impiegato,

nome varchar(50),

età integer,

id_manager id_impiegato);

CAST.

I valori dei distinct type sono considerati come distinti dai valori del tipo di base, ossia impiegato non è un tipo integer.

Inoltre il casting non è automatico, le funzioni di cast (se necessarie) vanno implementate esplicitamente, eventualmente direttamente dal sistema. La seguente query restituisce un errore:

SELECT nome FROM Impiegati WHERE id_manager = 123;

La corretta sintassi è la seguente:

select * from Impiegati, table(id) i
where i.column_value = …;

Questa naturalmente è una operazione di casting implicita.

Uso dei Tipi di Dato Astratti.

E’ possibile utilizzare Tipi di dato Astratti per raggruppare in oggetti, colonne correlate. Per esempio, le colonne che fanno parte di informazioni relative a indirizzi di persone fisiche possono essere raggruppate in un tipo di dati INDIRIZZO_TY tramite un comando di create type es.:

create type INDIRIZZO_TY as object

( Via varchar2(…),

Città varchar2(…),

Provincia varchar2(…),

CAP varchar2(…)

);


Il comando create type del listato precedente crea un tipo di dati astratto nominato INDIRIZZO_TY, che può essere utilizzato quando si creano altri oggetti di database, o in una qualsiasi definizione di variabile.

Ad es.:

create type PERSONA_TY as object

(Nome varchar2(…),

Indirizzo INDIRIZZO_TY

);

Oppure in una procedura che utilizza il tipo stesso:

declare

Vtty_Indirizzo INDIRIZZO_TY;


Naturalmente la generica variabile definita di tipo INDIRIZZO_TY conterrà un puntatore ad una struttura multi valore.

 
 
 
Vai alla Home Page del blog
 
 

© Italiaonline S.p.A. 2024Direzione e coordinamento di Libero Acquisition S.á r.l.P. IVA 03970540963