Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    6

    [MySql] Problema con i trigger

    ciao a tutti!
    ho una tabella con 2 campi: Id_Ruolo, Descrizione
    Il campo Id_Ruolo è formato da 3 caratteri, di cui il primo può essere solo le lettere 'D', 'G', 'A' mentre gli altri 2 caratteri sono numeri quindi i valori accettati in quel campo saranno per esempio A01,A02,...,D01,D02,...,G01,G02,...

    Per fare in modo che non vengano accettati id che hanno come lettera iniziale una diversa dalle 3 scritte sopra, ho creato un trigger, in questo modo:

    DELIMITER //
    CREATE TRIGGER check_insert_ruolo
    BEFORE INSERT ON Ruoli
    FOR EACH ROW
    BEGIN
    IF ((NEW.Id_Ruolo != 'D%') OR (NEW.Id_Ruolo != 'A%') OR (NEW.Id_Ruolo != 'G%')) THEN
    SET NEW.Id_Ruolo = NULL;
    END IF;
    END; //
    solo che, giustamente, essendo Id_Ruolo la chiave primaria della tabella, se il valore è sbagliato mette il campo a NULL e mysql da errore.

    esiste mica un modo per segnalare all'utente che ha inserito un valore non corretto?
    Una specie di "raise_application_errors" per mysql per intenderci...

    Grazie in anticipo a tutti quanti risponderanno

  2. #2
    Ciao

    so che è meno professionale, ma se tu il controllo lo facessi dopo? Voglio dire... invece di usare un trigger potresti far inserire all'utente quello che vuole e poi, prima della INSERT che va a scrivere sul DB potresti fare un controllo sulla stringa inserita e mostrare a video qualcosa tipo "ATTENZIONE! possono essere accettati solo campi con questo formato Axx, ..."

    Mi rendo conto che la tua soluzione era molto più bella, ma non sono praticissimo di triggers!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  3. #3
    Anche secondo me è più pratico: potresti ad esmpio creare uno switch che confronta l'input con le lettere D, A e G. Quando ne incontra una fa un break e inserisce l'input nel database. Di default invece fa un die del tipo "ATTENZIONE! Puoi inserire solo le lettere D, A e G!!".


  4. #4
    Secondo me è meglio... poi fai tu.
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    6
    si per la parte php avevo pensato anche io allo switch. Il problema è che poi sarà possibile agire sul db anche attraverso mysql e in quel caso, se viene eseguita una insert o una update con valori sbagliati...verrebbero inseriti lo stesso!
    Il trigger per l'update l'ho già fatto e funziona, quello per l'insert mi sta facendo dannare!
    A me basterebbe anche che nel caso non trovasse il campo che comincia per 'A', 'D', 'G'' non inserisca proprio, anche senza dare errore al limite

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 © 2024 vBulletin Solutions, Inc. All rights reserved.