IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Equivalent RAISE_APPLICATION_ERROR en Mysql


Sujet :

SQL Procédural MySQL

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Par défaut Equivalent RAISE_APPLICATION_ERROR en Mysql
    Bonjour à tous,

    Je réalise un trigger et je souhaiterais affiché un message d'erreur lorsque certaines conditions ne sont pas satisfaites.

    Je souhaiterais donc savoir s'il existe un équivalent en Mysql du RAISE_APPLICATION_ERROR car après de nombreuses recherches je n'ai rien trouver et je n'aime pas l'idée d'appeler une fonction qui n'existe pas pour lever une exception.

    SI toutefois vous avez une autre manière d'aborder le probleme, je suis preneur.

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    Bonjour,

    j'ai moi aussi le même problème j'ai pourtant cherché de nombreuses heures sur des forums... et j'en suis arrivé à faire la même chose (le tutoriel de cette page indiquer cette solution).

    C'est pour un projet, c'est pas super urgent mais si quelqu'un avait la solution je le remercie par avance.

    La solution d'appeler une fonction qui n'existe pas permet bien de faire les vérification que l'on souhaite dans le triggers et de stopper pour sauvegarder l'intégrité de la base. Mais gérer les exceptions permettrai de ne pas bloquer sur une erreur, de faire tous les test et ensuite de les afficher tous.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    J'ai trouvé une autre solution qui te conviendra peut être (qui marche qu'avec les procédures, pas les triggers) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    CREATE PROCEDURE erreur_continue
    (
    var1 TYPE,
    var1 TYPE,
    ....
    OUT var_erreur TEXT,
    OUT is_erreur tinyint(1)
    )
    BEGIN 
      IF ( NEW.id IS NOT NULL ) 
      THEN  
        SET var_erreur=var_erreur."L'id ne doit pas être spécifié.";
        is_erreur=1;
      END IF;
      IF CHAR_LENGTH(NEW.codification)>128 
      THEN  
        SET var_erreur=var_erreur."Le champs \"codification\" posséde plus de 128 caractéres.";
        is_erreur=1;
      END IF;
      IF CHAR_LENGTH(NEW.login)>128 
      THEN  
        SET var_erreur=var_erreur."Le champs \"login\" posséde plus de 128 caractéres.";
        is_erreur=1;
      END IF;
      //"içi une suite d\'instruction si pas d\'erreur rencontré"
    END
    //
    La solution n'utilise pas les erreur retournées par SQL mais permet de faire une suite de test avant de faire une ou plusieurs instructions et de retourner les erreurs.
    Petit problème de cette solution, n'affichant pas d'erreur si quelqu'un l'utilise à partir d'un logiciel comme phpMyAdmin, donc sans traitement de ce que la procédure retourne, la personne pensera que la procédure c'est exécutée correctement sans que ce soit forcément le cas.

    J'espère que cela pourra t'aider.

    Sinon pour les triggers cela m'aiderai bien si quelqu'un sait comment envoyer des messages d'erreurs personnalisés. Par exemple on vérifie qu'une adresse mail est valide et si elle ne l'est pas on renvoie un message du type "le mail que vous avez spécifier est invalide".

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Par défaut
    Salut,

    Ben moi j'ai fait un truc du meme genre pour les procedure et les messages retournés sont affiché à partir de PHP

    Mais moi c'est pour les triggers que ça m'intéresse puisqu'il ne peuvent pas renvoyer de variable

    Merci quand meme.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    J'ai trouvé une autre solution mais elle ne me convient pas toute a fait peut être qu'elle te conviendra.

    1)on créer une table erreur avec pour champs (nom_table, numero , message )
    2)les triggers utilisent des fonctions qui n'existent pas, codifier de cette façon : TABLE_erreur_NUM ( TABLE étant le nom de la table concerner par l'erreur et NUM un numéro).
    Les erreurs renvoyé ressemble donc a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1305 - PROCEDURE emplois_du_temps.utilisateur_erreur_1 does not exist
    4) on récupére le message d'erreur renvoyer en php, on le traite pour récupérer la table et le numéro et on va chercher dans la table erreur le message correspondant.

    Le problème est que si les requêtes sont fait en console on a pas le message d'erreur et que seulement une erreur peut être afficher (Donc pas de message du type :
    -le mot de passe est sa confirmation sont différent
    -le catcha est différent de ce que vous avez taper
    -...

    Donc si quelqu'un avait une solution plus adapté, ce serait sympa de me la proposé sa m'aiderait bien, ainsi que billy14 surement .

    Merci par avance.

  6. #6
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 507
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 507
    Par défaut
    Une des possibilités c'est de générer le message que vous souhaitez et juste après vous généré une erreur volontaire. Mais il faut placer le message dans une table. Mais il faut qu'elle soit assez grosse pour que ça débecte Mysql. Car il arrive que mysql ne fasse pas d'erreur alors qu'il y en a une.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Par défaut
    Bonjour,

    je vous remercie de votre aide.

    Vous allez surement vous dire que je suis exigeant mais vos solutions ne résolvent pas le problème dans le cas où l'administrateur injecte une requête SQL directement dans la base (par exemple à partir de PHPmyadmin).

    Effectivement, une erreur sera généré mais il ne verra pas le message d'erreur pour indiquer la cause de cette erreur.

    mais bon peut etre est ce trop demandé

    Si vous avez d'autre idées faites le moi savoir.

    Merci d'avance

  8. #8
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 507
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 507
    Par défaut
    Il y en a pas parce MysqlAB n'a pas prévus cela pour l'instant. SQLServer à la fonction RAISERROR qui permet de faire cela. Il faut attendre ou dire au webmaster de pas faire n'importe quoi.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Par défaut
    Bonsoir,

    merci pour votre aide

    Citation Envoyé par berceker united Voir le message
    Il y en a pas parce MysqlAB n'a pas prévus cela pour l'instant. SQLServer à la fonction RAISERROR qui permet de faire cela.
    Je vais donc me contenter de vos solutions.

  10. #10
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 507
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 507
    Par défaut
    La seul solution consiste à générer une erreur très foireuse pour le serveur afin que cela bloque tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Equivalent à sqlite_create_function dans MySQL?
    Par ecocentric dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/02/2009, 12h42
  2. [SQL Server] Equivalent du if (MySQL) / decode (Oracle)
    Par Mr T dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2008, 11h52
  3. Equivalent à profiler pour Mysql
    Par berceker united dans le forum Administration
    Réponses: 0
    Dernier message: 13/08/2008, 14h42
  4. Equivalent de AutoIncrement (MySQL)
    Par jmjmjm dans le forum Oracle
    Réponses: 3
    Dernier message: 13/06/2007, 13h47
  5. equivalent de EXPLAIN (mysql) pour firebird ?
    Par ]matmat[ dans le forum SQL
    Réponses: 3
    Dernier message: 25/08/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo