ciao si in effetti sn della parthenopeinfatti ricordo il tuo nick dal forum dell'uni...
cmq.... in pratica dovrei fare un trigger che mi gestisca l'inserimento degli eventi nella mia videoteca e cioè mi controlla se la data dell'evento è valida cioè se non è minore di sysdate poi se la data non è già occupata e poi controlla se ci sono già 2 eventi nella videoteca in questione(la mia è una catena di videoteca) e nel caso inserisce l'evento in una videoteca che ha meno impegni mensili....VVoVe:
in pratica volevo usare due cursori in uno stesso loop ma mi sono accorto che non ne avevo il bisogno xkè un cursore lo uso per cercare nella videoteca una stessa data di quella che voglio inserire ma in ogni caso ho un errore di esecuzioneVVoVe:
![]()
ti posto il codice anche se sò che sarà un casino per te capire il tutto..
[code]
create or replace trigger g
before insert on EVENTI
for each row
declare
data_occupata EVENTI.DATA_EVENTO%TYPE;
videoteca_impegnata_mese EVENTI.PI%TYPE;
videoteca_libera_mese EVENTI.PI%TYPE;
cursor troppi_eventi_mese is select PI from eventi where to_char(DATA_EVENTO,'MON')=to_char(sysdate,'MON') group by PI having count(PI)>2;
cursor data_gia_impegnata is select DATA_EVENTO from EVENTI where DATA_EVENTO=:new.DATA_EVENTO and PI=:new.PI;
data_non_valida exception;
data_non_disponibile exception;
begin
select distinct PI into videoteca_libera_mese from EVENTI where to_char(DATA_EVENTO,'mon')=to_char(:new.DATA_EVENT O,'mon') group by PI having count(PI)<=ALL(select count(PI) from EVENTI where to_char(DATA_EVENTO,'mon')=to_char(:new.DATA_EVENT O,'mon') group by PI);
if(:new.DATA_EVENTO<=sysdate) then
raise data_non_valida;
end if;
open data_gia_impegnata;
fetch data_gia_impegnata into data_occupata;
if (data_gia_impegnata%ROWCOUNT>0)then
raise data_non_valida;
end if;
close data_gia_impegnata;
open troppi_eventi_mese;
fetch troppi_eventi_mese into videoteca_impegnata_mese;
loop
if(:new.PI=videoteca_impegnata_mese) then
insert into EVENTI(PI) values(videoteca_libera_mese);
end if;
fetch troppi_eventi_mese into videoteca_impegnata_mese;
exit when troppi_eventi_mese%NOTFOUND;
end loop;
close troppi_eventi_mese;
exception
when data_non_valida then
raise_application_error('-20008','DATA NON VALIDA!');
when data_non_disponibile then
raise_application_error('-20006','DATA_OCCUPATA!');
end;
/
[\code]