Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

[Basi di dati] Creazione TRIGGER

23/09/2017, 23:21

Ciao, avrei bisogno di aiuto per la creazione di un trigger. Praticamente devo fare in modo che un campo (tipo) di un utente che ha più di 10 iscrizioni confermate ad un evento venga modificato.
Le iscrizioni confermate sono date dal campo Stato di questa tabella:
ISCRIZIONE(Id, Data, UtenteS, UtenteP, Ruolo, Stato, IdEvento, Squadra)

(Per l'UtenteS della tabella, che poi riferisce il relativo utente nella tabella Utente)

1° passo dovrei contarle per ogni utente. Se sono più di 10
2° passo aggiorno la tabella Utente e cambio il campo Tipo.

Problema: mica posso fare un trigger che conta continuamente le iscrizioni!
L'unica cosa che mi viene in mente è questa: inserisco un campo aggiuntivo nella tabella Utente dove memorizzo il numero di iscrizioni confermate che l'utente ha, chiamiamolo ad esempio IscrizioniConfermate.
Quindi con un trigger che reagisce ad ogni conferma d'iscrizione aumento il contatore IscrizioniConfermate, e con un altro trigger che reagisce alla conferma di un'iscrizione farei il cambio di tipologia
Problema1: non so come tradurre in codice tutto questo.
Problema2: è possibile farlo senza aggiungere un attributo aggiuntivo?

Birra pagata per chiunque mi aiuti :-D

Re: [Basi di dati] Creazione TRIGGER

24/09/2017, 04:10

Sinceramente non credo che contare le iscrizioni sia così problematico, soprattutto se hai definito un indice o qualcosa come una foreign key sull'utente nell'iscrizione. E non sarebbe comunque poi così tanto continuamente.

Re: [Basi di dati] Creazione TRIGGER

24/09/2017, 11:40

Sull'utente nell'iscrizione c'è la foreign key ovviamente.
Quindi potrei fare un trigger sulla tabella iscrizione che per ogni UPDATE dello stato di un'iscrizione mi fa il conteggio di quante sono quelle confermate per quell'utente, e poi se il dato è superiore a 10 mi fa un update sulla tabella utente?
Ma è possibile legare un trigger a una tabella che però fa operazioni anche su un'altra?

Re: [Basi di dati] Creazione TRIGGER

24/09/2017, 12:17

Ok ho provato a fare una cosa del genere

CREATE TRIGGER PromozioneUP
AFTER UPDATE ON ISCRIZIONE
FOR EACH ROW
SELECT COUNT(*) AS ISCRIZIONI_CONFERMATE
FROM ISCRIZIONE
WHERE ISCRIZIONE.Stato='C'
BEGIN
WHEN ISCRIZIONI_CONFERMATE>10
UPDATE UTENTE
SET NEW.TIPO='P'
WHERE UTENTE.Username=NEW.USERNAME
END

Naturalmente mi dà errore di sintassi :(

Re: [Basi di dati] Creazione TRIGGER

24/09/2017, 18:53

Che errore ti viene restituito? Sinceramente uso raramente i trigger per cui non sono sicuro di quali siano i loro limiti. Credo dipenda anche dal particolare database che stai usando per fare le tue prove.

Re: [Basi di dati] Creazione TRIGGER

24/09/2017, 20:24

Ho risolto con 2 trigger e l'aggiunta di un attributo che tiene traccia del numero di iscrizioni confermate, altrimenti era un casino (almeno per me). Comunque il DB è MySQL.

Eccoli:

1° trigger
CREATE TRIGGER `Incremento_Iscrizioni`
AFTER UPDATE ON `ISCRIZIONE`
FOR EACH ROW
BEGIN
IF NEW.Stato <> OLD.Stato AND New.Stato='C' THEN
UPDATE UTENTE
SET Iscrizioni_Confermate=Iscrizioni_Confermate+1
WHERE UTENTE.Username=NEW.UtenteS;
END IF; END

CREATE TRIGGER `PromozioneUP`
BEFORE UPDATE ON `UTENTE`
FOR EACH ROW
BEGIN
IF NEW.Iscrizioni_Confermate>10 AND NEW.Tipo='S' THEN SET NEW.Tipo='P';
END IF; END

Grazie di tutto!
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.