Oracle Lessons

Lezioni Pratiche in Italiano

Creato da Pietro_Bonfigli il 11/03/2009

Area personale

 

Tag

 

Archivio messaggi

 
 << Agosto 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 5

Post n°31 pubblicato il 18 Agosto 2010 da Pietro_Bonfigli
 

 Manipolazione dei dati mediante Object View.

I dati nella tabella CLIENTE possono essere aggiornati tramite la Object View CLIENTE_OV, oppure aggiornando direttamente la tabella CLIENTE nel modo tradizionale.

Se si vuole utilizzare la Object View occorre far uso dei Constructor Method dei tipi istanziati specificando il loro nome nel comando insert:

 

insert into CLIENTE_OV

values (… , PERSONA_TY(‘..’, INDIRIZZO_TY(‘…’,’…’,’…’,…)));

 

Dato che si possono utilizzare entrambi i metodi per inserire i valori nella Object View, è possibile standardizzare il modo in cui l’applicazione manipola i dati. Se le operazioni di inserimento si basano tutte su tipi di dato astratti, si potrà utilizzare lo stesso tipo di codice, indipendentemente che dal fatto che i tipi di dato astratti siano stati creati prima o dopo la tabella.

Uso dei Trigger INSTEAD OF.

Se viene create una Object View, è possibile utilizzare i trigger INSTEAD OF per indicare a Oracle come aggiornare le tabelle di base che fanno parte della vista. Questi trigger si applicano sia a Object Views, sia a viste relazionali convenzionali.

Per esempio se una vista comporta un join di due tabelle, la possibilità di aggiornare i record nella vista è limitata. Tuttavia se si usa un trigger INSTEAD OF, è possibile indicare a Oracle come aggiornare , cancellare o inserire i record nelle tabelle nel caso in cui un utente cerchi di modificare i valori tramite una vista.

Il codice contenuto nel trigger INSTEAD OF viene eseguito al posto del comando insert, update o delete.

 

Vediamo il seguente esempio:

Supponiamo di avere una vista che unisce tramite join la tabella BIBLIOTECA alla tabella BIBLIOTECA_AUTORE:

 

create or replace view AUTORE_EDITORE as

select BA.NOMEAutore.TITOLO, B.Editore

from BIBLIOTECA_AUTORE BA inner join BIBLIOTECA B

using (Titolo);

 

E’ possibile selezionare dei valori da questa vista e manipolare i dati mediante la vista stessa con i trigger INSTEAD OF.

 

Si considerino i seguenti record:

 

select * from AUTORE_EDITORE

where Nome_Autore = ‘PIPPO’;

 

NOME_AUTORE EDITORE

-------------------------- ----------------------------

PIPPO’ ‘PLUTO’

Se si cerca di aggiornare il valore del campo ‘Editore’ con la seguente update, Oracle restituisce un errore:

 update AUTORE_EDITORE

set Editore = ‘Tizio’

where Nome Autore = ‘PIPPO’;

 

ora-01720: cannot modify a column wich maps to a non key-preserved table;

 

Il problema è che Oracle non è in grado di stabilire quale editore di quale record aggiornare nella tabella BIBLIOTECA.

 

Se associata alla view viene creato un trigger INSTEAD OF fatto così:

 

create or replace trigger AUTORE_EDITORE_UPDATE

instead of UPDATE on AUTORE_EDITORE

for each row

begin

if :old.Editore <> :new.Editore

then

update BIBLOTECA

set Editore = :new.Editore

where Titolo = :old.Titolo;

end if;

if :old.NomeAutore <> :new.NomeEditore

then

update BIBLOTECA_AUTORE

set NomeAutore = :new.NomeEditore

where NomeAutore = :old.NomeAutore;

end if;

end;

 

Nella testate del trigger si descrive il suo uso tramite la clausola instead of. Il trigger serve a supportare i comandi di update eseguiti sulla vista AUTORE_EDITORE. Si tratta di un trigger a livello di riga; ogni riga modificata viene elaborata come definito dal corpo.

Il corpo del trigger specifica a Oracle come eseguire l’aggiornamento. Il primo controllo si concentra sul valore della colonna Editore:

Se il vecchio valore è diverso da nuovo allora vengono aggiornati i record della tabella BIBLIOTECA. Stesso discorso per la tabella BIBLIOTECA_AUTORE nei confronti della colonna NomeAutore.

Pertanto ogni aggiornamento della vista consente di aggiornare nessuna o entrambe le tabelle. Il trigger INSTEAD OF ideato per supportare le viste ad oggetto, rappresenta uno strumento potente per lo sviluppo di applicazioni.

 
 
 
Vai alla Home Page del blog
 
 

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