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

    [MySQL] Procedura e ritorno di errori

    Ciao!

    Le procedure di MySQL consentono di restituire un messaggio d'errore?

    Mi spiego meglio esemplificando, data la seguente procedura:

    codice:
    DROP PROCEDURE InserisciPreferenza;
    DELIMITER //
    CREATE PROCEDURE InserisciPreferenza(IN Pizza SMALLINT, IN Utente VARCHAR(50))
    BEGIN
    DECLARE NumeroPreferenze SMALLINT;
    SELECT COUNT(*) INTO NumeroPreferenze FROM ElencoPreferenze E WHERE E.Utente = Utente;
    IF NumeroPreferenze < 3 THEN
    INSERT INTO Preferenza VALUES (Pizza, Utente);
    ELSE
    …
    END IF;
    END; //
    DELIMITER ;
    Se la procedura entrasse nella clausola ELSE del costrutto condizionale, cioè se il valore della variabile NumeroPreferenze fosse maggiore o uguale a 3, vorrei che venisse restituito un errore (possibilmente standard MySQL) del tipo “impossibile inserire la tupla”. In pratica devo aggiungere un vincolo sulla tabella per sopperire al mancato supporto da parte di MySQL dell'istruzione CHECK di SQL.

    Grazie mille!
    (\_/)
    (^_^)
    (> <)

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: [MySQL] Procedura e ritorno di errori

    Originariamente inviato da Skywalker87
    Ciao!

    Le procedure di MySQL consentono di restituire un messaggio d'errore?

    Mi spiego meglio esemplificando, data la seguente procedura:

    codice:
    DROP PROCEDURE InserisciPreferenza;
    DELIMITER //
    CREATE PROCEDURE InserisciPreferenza(IN Pizza SMALLINT, IN Utente VARCHAR(50))
    BEGIN
    DECLARE NumeroPreferenze SMALLINT;
    SELECT COUNT(*) INTO NumeroPreferenze FROM ElencoPreferenze E WHERE E.Utente = Utente;
    IF NumeroPreferenze < 3 THEN
    INSERT INTO Preferenza VALUES (Pizza, Utente);
    ELSE
    …
    END IF;
    END; //
    DELIMITER ;
    Se la procedura entrasse nella clausola ELSE del costrutto condizionale, cioè se il valore della variabile NumeroPreferenze fosse maggiore o uguale a 3, vorrei che venisse restituito un errore (possibilmente standard MySQL) del tipo “impossibile inserire la tupla”. In pratica devo aggiungere un vincolo sulla tabella per sopperire al mancato supporto da parte di MySQL dell'istruzione CHECK di SQL.

    Grazie mille!
    Se non erro, MySql non consente di ritornare risultati diversi da una query nelle stored procedure. Puoi però aggirare il problema creandoti una tabella temporanea che viene popolata nel ramo ELSE da un record che contiene l'errore, al termine del ramo ELSE lanci una SELECT che ti elenca l'errore.

    ad esempio:
    CREATE TEMPORARY TABLE lista_errore (descrizione varchar(200))
    INSERT INTO lista_errore VALUES('Impossibile inserire la tupla')

  3. #3
    Grazie per la risposta!

    Avevo già pensato alla tua soluzioni, ed è quella che sto utilizzando tutt'ora per l'applicazione, ma speravo di poterla sostituire con una soluzione più "elegante".
    (\_/)
    (^_^)
    (> <)

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da Skywalker87
    Grazie per la risposta!

    Avevo già pensato alla tua soluzioni, ed è quella che sto utilizzando tutt'ora per l'applicazione, ma speravo di poterla sostituire con una soluzione più "elegante".
    Prova con una stored function invece che una stored procedure,
    vedi qui

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.