Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [trigger]Perchè questo errore??

    Ciao, ho scritto questo trigger per gestire i posti liberi a seconda di una prenotazione, credo sia tutto giusto, ma mi da errore 1064!

    Manca qualcosa?? Errori di sintassi??


    CREATE TRIGGER AS update_seat
    AFTER INSERT OR DELETE
    ON prenotation
    FOR EACH ROW
    BEGIN
    UPDATE data.show SET NEW.freeseat=OLD.freeseat - 1
    WHERE show.id_show=prenotation.id_show
    END;
    Grazie.

  2. #2
    Che versione di MySQL stai utilizzando?
    Administrator of NAMDesign.Net

  3. #3
    mysql 5.0

  4. #4
    Dalla documentazione di MySQL 5.0 (http://dev.mysql.com/doc/refman/5.0/...e-trigger.html):

    Codice PHP:
    DELIMITER |

    CREATE TRIGGER testref BEFORE INSERT ON test1
      
    FOR EACH ROW BEGIN
        INSERT INTO test2 SET a2 
    = NEW.a1;
        
    DELETE FROM test3 WHERE a3 = NEW.a1;  
        
    UPDATE test4 SET b4 b4 1 WHERE a4 = NEW.a1;
      
    END;
    |

    DELIMITER 
    Quindi il tuo trigger andrebbe scritto:
    Codice PHP:
    DELIMITER |

    CREATE TRIGGER update_seat AFTER INSERT OR DELETE ON prenotation
      
    FOR EACH ROW BEGIN
        UPDATE data
    .show 
        SET 
    NEW.freeseat=OLD.freeseat 
        WHERE show
    .id_show=prenotation.id_show;
    END;
    |

    DELIMITER 
    Administrator of NAMDesign.Net

  5. #5
    Eccomi a notte fonda, ho provato il trigger da te proposto e sia con riga di comando che con phpmyadmin mi da sempre un errore, ed è come sempre incomprensibile capire il punto esatto
    Uff nessuno ha mai dovuto inserire un trigger?? come ha fatto?? mi sembra impossibile ormai...


    grazie per l'aiuto cmq, sempre a disposizione per altri tuoi consigli LeaderGL...

  6. #6
    mi scrivi esattamente tutta la stringa dell'errore riportato?
    Administrator of NAMDesign.Net

  7. #7
    L'errore riportato è questo:


    Messaggio di MySQL: Documentazione
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR DELETE ON prenotation
    FOR EACH ROW BEGIN
    UPDATE data.show
    SET NE' at line 1

  8. #8
    Prova senza l'OR, quindi solo con "AFTER INSERT ON"; mi stanno venendo dubbi che non puoi mettere tutti e due insieme...

    Anche xkè secondo sintassi MySQL puoi fare:
    Codice PHP:
    CREATE
        
    [DEFINER = { user CURRENT_USER }]
        
    TRIGGER trigger_name trigger_time trigger_event
        ON tbl_name 
    FOR EACH ROW trigger_stmt 
    e qui il "trigger_event" non è mai specificato come combinazione di eventi ma lo riporta sempre come tipo di evento singolo.
    Administrator of NAMDesign.Net

  9. #9
    si giusto bravo ho creato 2 trigger, uno per l'insert e uno per il delete!!!

    Inseriti correttamente, ora però quando a livello applicativo, ovvero da sito, genero un evento che dovrebbe richiamarmi il trigger mi esce il seguente errore:

    unknown column 'prenotation.id_show'
    ma esiste!!!


  10. #10
    Ricapitoliamo, il trigger inserito è il seguente:

    Codice PHP:

    delimiter 
    //

    CREATE TRIGGER upd_seat AFTER INSERT ON prenotation
    FOR EACH ROW
    BEGIN
    UPDATE data
    .show SET
    freeseat
    =freeseat 1
    WHERE show
    .id_show=prenotation.id_show;
    END;// 
    L'errore che riscontro quando effettuo una prenotazione è il seguente:

    Codice PHP:

    'Unknown column prenotation.id_show in WHERE clause' 
    Il problema è quindi nella clausola WHERE e mi chiedevo se ci sia un modo per passare il valore dell' id_prenotation appena inserito nel trigger

    L'errore penso sia dovuto al fatto che la tabella prenotation non la chiamo e quindi non trova la colonna citata!

    Aiutoooooooooo

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.