Help trigger :D

di il
5 risposte

Help trigger :D

Salve a tutti mi sto esercitando per un esame di "Basi di Dati" e sto provando a svolgere questo esercizio:

Editori(codice, nome, indirizzo, citta)
Librerie(codice, nome, indirizzo, citta)
Autori(nome, nascita, morte*, nazione)
Pubblicazioni(codice, titolo, data stampa, autore (fk), editore(fk))
Giacenze(libreria (fk), pubblicazione (fk), copie disponibili)
Vendite(libreria (fk), pubblicazione (fk), data, copie vendute)

scrivere un trigger che, in seguito all’inserimento di una nuova ennupla nella relazione Vendite, aggiorni la corrispondente giacenza: in particolare il trigger deve: i. impedire la modi?ca se il numero di copie disponibili `e inferiore alle copie vendute; ii. decrementare le copie disponibili, altrimenti (si noti che le copie disponibili possono quindi essere zero dopo la modi?ca).

Questa è la mai soluzione, penso sia completamente errata, ma almeno ci ho provato

create trigger aggiornamento_vendite
after insert on vendite
when giacenze.copie_disponibili < vendite.copie_vendute
alter table vendite
add constraint no_modifica
giacenze.copie_diponibili > vendite.copie_vendute
update giacenze
set copie_disponibili = copie_disponibili - 1

Qualcuno può aiutarmi a correggerla?

5 Risposte

  • Re: Help trigger :D

    Devi usare il dialetto di SQL server o l'SQL standard?
  • Re: Help trigger :D

    SQL standard Ma comunque se sei capace di farlo solo in SQL server mi andrebbe bene per prendere spunto
  • Re: Help trigger :D

    No, va bene l'sql standard.

    Il primo errore grave è la condizione del when, che ti impedisce di svolgere il punto 2 della consegna. Inoltre, non so come fate voi, ma io per abortire un'operazione ho sempre richiamato una funzione che solleva un fatal error (ad esempio, in oracle si usa raise_application_error()). Di certo non si aggiunge un constraint alla tabella (innanzitutto perché hai messo un constraint che confronta campi di tabelle diverse, e poi perché se potessi effettuare un controllo con un constraint non avresti bisogno di un trigger.

    Inizia a correggere questi punti.
  • Re: Help trigger :D

    Non riesco a capire che condizione mettere dentro al when
    Inoltre hai ragione, l'azione del trigger va implementata usando una funzione a parte, dichiarata in modo opportuno usando ad esempio "returns trigger". Il problema è che non ci ho capito niente dei trigger, se vedessi qualcosa di più concreto magari capirei qualcosa in più.
  • Re: Help trigger :D

    Non devi mettere nessuna condizione. Non è obbligatoria.

    Quanto alla seconda parte, non ho capito cosa intendi.
Devi accedere o registrarti per scrivere nel forum
5 risposte