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

    [MySQL] Problema a creare un trigger

    Ciao a tutti,
    scausate la domanda forse banale ma nel creare questo trigger dove "data_nascita" e "anno_assunzione" sono colonne della tabella Dipendenti

    codice:
    CREATE TRIGGER ctrl_date
    BEFORE INSERT ON Dipendenti
    FOR EACH ROW
    BEGIN
    IF
    NEW.data_nascita>1991-12-31 AND NEW.anno_assunzione<2009 THEN
    	SET NEW.data_nascita=0000-00-00;
    	SET NEW.anno_assunzione=0000;
    END IF;
    END;
    la shell mi da errore, in particolare dalla riga 7 in poi, come se la sintassi fosse sbagliata. Ho consultato su internet la sintassi ufficiale e infatti appare un pochino diversa da questa però vorrei mantenere questa strutttura che è molto leggibile.

    Cosa posso correggere??

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova a racchiudere le date tra apici e verifica tramite

    select @@sql_mode

    le impostazioni correnti. A seconda di esse, non è detto che '0000-00-00' venga accettata.

    http://dev.mysql.com/doc/refman/5.0/...-sql-mode.html

  3. #3
    Mi dice che non riconosce la variabile "anno_assunzione" che è una colonna della mia tabella, mentre per data_assunzione non dà questo problema!! Poi da sempre gli errori delle altre linee come se la sintassi fosse errata..strano!!

    Azzarderei nel dire che non gli piacciono quei punto e virgola

    Per quanto riguarda quella cosa che mi dicevi ecco il risultato:
    +----------------------------------------------------------------------------+
    | @@sql_mode |
    +----------------------------------------------------------------------------+
    | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_ SUBSTITUTION |
    +-----------------------------------------------------------------------------+

  4. #4
    Allora sono riuscito a togliere qualche errore, in pratica se scrivo come nel codice il trigger non mi da errore però alla fine devo mettere il ; per terminare le istruzioni e lì mi tira fuori l'errore che però sembra non essere riferito a quel ;

    codice:
    mysql> CREATE TRIGGER ctrl_data
        -> BEFORE INSERT ON Personale
        -> FOR EACH ROW
        -> BEGIN
        -> IF
        -> NEW.data_nascita>'1991-12-31' AND NEW.anno_assunzione<2009 THEN
        ->  SET NEW.data_nascita=0000-00-00
        ->  SET NEW.anno_assunzione=0000
        -> END IF
        -> END
        -> ;
    ERROR 1064 (42000): 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 'SET NEW.anno_assunzione=0000
    END IF
    END' at line 8
    In pratica manca qualcosa alla linea 8, ma cosa??

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Devi cambiare il delimitatore e poi ripristinarlo.

    codice:
    delimiter //
    create trigger ctrl_date
    before insert on Dipendenti
    for each row
    begin
    if
    new.data_nascita>'1991-12-31' and new.anno_assunzione<2009 then
    	set new.data_nascita='0000-00-00';
    	set new.anno_assunzione=0;
    end if;
    end;//
    delimiter ;

  6. #6
    Penso proprio di si, ecco perchè sbroccava ad ogni ; proverò al più presto grazieeee

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.