Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MySQL] Error Code: 1235 This version of MySQL doesn't yet support 'multiple triggers

    Ciao,
    ho tristemente scoperto che la mia versione di mysql (5.5) non supporta più trigger che agiscono dopo lo stessa azione e con lo stesso evento.

    purtroppo il caso di studio da cui li traggo ne ha diversi così ... essendo nuova del mondo mysql e sql mi sono arenata e non riesco a uscire dalla situazione.
    Mi potete aiutare voi?

    i trigger sono:

    codice:
      create trigger RA3_4
      after insert on messaInScena
      for each row
      update messaInScena
      set postiDisponibili = (select capienza
                              from spazio
                              where nome = New.spazio) 
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
    
    
      create trigger RA4_1
      after insert on messaInScena
      for each row
      update messaInScena
      set New.prezzoRidotto = New.prezzoIntero * 0.8
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
      
      
      create trigger RA4_2
      after insert on messaInScena
      for each row
      update messaInScena
      set New.prezzoStudenti = New.prezzoIntero * 0.5
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
    ps. continuano nei successivi messaggi

  2. #2
    codice:
    create trigger RA4_3
      after update of prezzoIntero on messaInScena
      for each row
      update messaInScena
      set New.prezzoRidotto = New.prezzoIntero * 0.8
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
      
      
      create trigger RA4_4
      after update of prezzoIntero on messaInScena
      for each row
      update messaInScena
      set New.prezzoStudenti = New.prezzoIntero * 0.5
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);

  3. #3
    codice:
    create trigger RA5_1
      after insert on prenotazione
      for each row
      when (tipo = "Intero")
      update prenotazione
      set New.prezzo = (select prezzoIntero
                        from messaInScena
                        where (data = New.dataSpettacolo and 
                               ora = New.oraSpettacolo and
                               spazio = New.spazioSpettacolo))
      where (dataSpettacolo = New.dataSpettacolo and 
             oraSpettacolo = New.oraSpettacolo and
             spazioSpettacolo = New.spazioSpettacolo and 
             numero = New.numero);  
             
    
      create trigger RA5_2
      after insert on prenotazione
      for each row
      when (tipo = "Ridotto")
      update prenotazione
      set New.prezzo = (select prezzoRidotto
                        from messaInScena
                        where (data = New.dataSpettacolo and 
                               ora = New.oraSpettacolo and
                               spazio = New.spazioSpettacolo))
      where (dataSpettacolo = New.dataSpettacolo and 
             oraSpettacolo = New.oraSpettacolo and
             spazioSpettacolo = New.spazioSpettacolo and 
             numero = New.numero);  
      
    
      create trigger RA5_1
      after insert on prenotazione
      for each row
      when (tipo = "Studenti")
      update prenotazione
      set New.prezzo = (select prezzoStudenti
                        from messaInScena
                        where (data = New.dataSpettacolo and 
                               ora = New.oraSpettacolo and
                               spazio = New.spazioSpettacolo))
      where (dataSpettacolo = New.dataSpettacolo and 
             oraSpettacolo = New.oraSpettacolo and
             spazioSpettacolo = New.spazioSpettacolo and 
             numero = New.numero);
    di questi mi lascia perplessa pure il when... non dovrebbe essere una cosa tipo
    CASE espressione
    WHEN valore THEN risultato
    ELSE risultato_default
    END

  4. #4
    ce un articolo di un tizio che conclude dicendo spero possa essere d'aiuto a qualcuno..

    Speriamo : http://belitangcomputer.blogspot.it/...-of-mysql.html
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Originariamente inviato da bomberdini
    ce un articolo di un tizio che conclude dicendo spero possa essere d'aiuto a qualcuno..

    Speriamo : http://belitangcomputer.blogspot.it/...-of-mysql.html
    mmm... non credo vada bene, per 2 motivi i miei trigger hanno nomi diversi e poi devono coesistere in quanto sono regole diverse che devono essere applicate. con il drop non cancellerei il trigger?

  6. #6
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    mah, non conosco mysql ma mi sembra che semplicemente abbiano creato diversi trigger per separare le diverse operazioni (ad esempio di aggiornamento) ed in ogni trigger vanno ad aggiornare un solo campo quando invece probabilmente si può fare tutto con una sola operazione

    Ad esempio se noti i trigger RA3_4, RA4_1, RA4_2 sono tutti "after insert" della stessa tabella (messainscena) ed hanno tutti la stessa condizione "Where (data = New.data and ora = New.ora, spazio = New.spazio);"
    Semplicemente ogni trigger aggiorna una colonna; ma potresti provare allora ad unire il tutto in una istruzione sola con una cosa del tipo

    codice:
    after insert on messaInScena
      for each row
      update messaInScena
      set postiDisponibili = (select capienza
                              from spazio
                              where nome = New.spazio), 
    
      New.prezzoRidotto = New.prezzoIntero * 0.8,
      New.prezzoStudenti = New.prezzoIntero * 0.5
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
    cioè aggiorni tutte le colonne in un colpo solo (tanto la condizione per aggiornarle è la stessa)

    in maniera analoga puoi unificare RA4_3 e RA4_4 e tutti gli RA5 (che agiscono su un'altra tabella)

  7. #7
    Originariamente inviato da comas17
    mah, non conosco mysql ma mi sembra che semplicemente abbiano creato diversi trigger per separare le diverse operazioni (ad esempio di aggiornamento) ed in ogni trigger vanno ad aggiornare un solo campo quando invece probabilmente si può fare tutto con una sola operazione

    Ad esempio se noti i trigger RA3_4, RA4_1, RA4_2 sono tutti "after insert" della stessa tabella (messainscena) ed hanno tutti la stessa condizione "Where (data = New.data and ora = New.ora, spazio = New.spazio);"
    Semplicemente ogni trigger aggiorna una colonna; ma potresti provare allora ad unire il tutto in una istruzione sola con una cosa del tipo

    codice:
    after insert on messaInScena
      for each row
      update messaInScena
      set postiDisponibili = (select capienza
                              from spazio
                              where nome = New.spazio), 
    
      New.prezzoRidotto = New.prezzoIntero * 0.8,
      New.prezzoStudenti = New.prezzoIntero * 0.5
      where (data = New.data and 
             ora = New.ora, 
             spazio = New.spazio);
    cioè aggiorni tutte le colonne in un colpo solo (tanto la condizione per aggiornarle è la stessa)

    in maniera analoga puoi unificare RA4_3 e RA4_4 e tutti gli RA5 (che agiscono su un'altra tabella)
    Grazie, era proprio quello che intendevo... avevo provato a fare da me, ma avevo pasticciato... ora ci riprovo tenendo come base il tuo codice, grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.