n° 219
Novembre 2017
Giugno 20, 2018, 02:55:58 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Aiuto per un Trigger in MySql  (Letto 2280 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Daniel2012
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« inserita:: Ottobre 13, 2008, 09:16:13 »

Salve, è il primo messaggioche posto in questo forum spero che qualcuno possa aiutarmi perkè sono giorni che sbatto la testa con questo benedetto codice. Purtroppo non sono un'esperto di MySql per cui se qualcuno può aiutarmi gliene sarei grato davvero:

Il problema è questo: sto implementando 1 piccolo database per la gestione di un videonoleggio di dvd. Tra le varie tabelle che ho creato ce ne sono in particolare due:

1) NOLEGGIO

Citazione
CREATE TABLE "noleggio" (
  "id_nol" int(11) auto_increment,
  "tipo" tinyint(1) NOT NULL default '0' COMMENT '0 se il noleggio è attualmente in corso, 1 se il noleggio è terminato',
  "DataRestEff" date default NULL COMMENT 'assumendo che se DataRestEff ha valore nullo, allora il dvd noleggiato non è ancora stato riconsegnato',
  "cliente" tinyint(4) NOT NULL,
  "dvd" int(10) NOT NULL,
  "inizio" datetime NOT NULL,
  PRIMARY KEY  ("id_nol"),
  KEY "FK_noleggio_1" ("cliente"),
  KEY "FK_noleggio_2" ("dvd"),
  KEY "FK_noleggio_3" ("inizio"),
  CONSTRAINT "FK_noleggio_1" FOREIGN KEY ("cliente") REFERENCES "cliente" ("id_cliente"),
  CONSTRAINT "FK_noleggio_2" FOREIGN KEY ("dvd") REFERENCES "dvd" ("id_dvd"),
  CONSTRAINT "FK_noleggio_3" FOREIGN KEY ("inizio") REFERENCES "giorno" ("data_iniz")
);

2) DVD

Citazione
CREATE TABLE "dvd" (
  "id_dvd" int(10) auto_increment,
  "data_fabb" date default NULL,
  "quantita" tinyint(1) NOT NULL default '5',
  "id_film" int(10) default NULL,
  PRIMARY KEY  ("id_dvd"),
  UNIQUE KEY "FK1" ("id_film"),
  CONSTRAINT "FK_dvd_1" FOREIGN KEY ("id_film") REFERENCES "film" ("id_film")
  check (quantita > 0 and quantita <= 5)
);

Quello che vorrei realizzare è un codice che automaticamente:

Citazione
Quando si inserisce un nuovo noleggio (attualmente in corso, x default), l’attributo quantità relativo al dvd che è noleggiato viene decrementato di 1 unità. E possibile inserire un noleggio corrente solo se l’attributo quantità relativo al dvd che si vuole noleggiare è maggiore di zero e minore di 5.
Quando si aggiorna un noleggio da corrente a passato, nel momento in cui il dvd viene restituito, l’attributo quantità relativo al dvd che è noleggiato viene incrementato di una unità fino a un massimo di 5.

Allo stato (magari pessimo) attuale delle mie conoscenze, dopo vari tentativi, sono arrivato a un codice di questo tipo  ( che manco a dirlo non funziona ovviamente )

Citazione
delimiter //
create trigger decrementa_quantita
after insert on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
                  from dvd join noleggio
                  on dvd.id_dvd = noleggio.dvd
                    where DataRestEff > now())
THEN
update dvd
set quantita = quantita - 1
END IF;
END; //
create trigger incrementa_quantita
after update of tipo and DataRestEff on noleggio
for each row
BEGIN
IF dvd.id_dvd in (select dvd.id_dvd
                  from dvd join noleggio
                  on noleggio.dvd = dvd.id_dvd
                  where noleggio.DataRestEff < now())
THEN
update dvd
set quantita = quantita + 1
   END IF;
END; //
delimiter;


Potreste aiutarmi per favore?

vi ringrazio
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines