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 :

Mon exception ne se déclenche pas !


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut Mon exception ne se déclenche pas !
    Bonjour,

    Voici, ci-dessous, la fin de ma procédure d'enregistrement de numéros de téléphone, dans laquelle je souhaite éviter d'enregistrer un numéro trop long qui serait tronqué dans la table par MySQL, ou bien manifestement erroné parce que trop court. Je ne sais pas encore si la taille de 16 caractères de ma colonne est suffisante ; je l'ajusterai, ainsi que ma procédure, si besoin. Au passage, si quelqu'un sait quelle est la longueur maxi d'un numéro de téléphone à l'international, je suis preneur de l'info !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	-- Vérification du numéro de téléphone
    	IF LENGTH(numero) NOT BETWEEN 4 AND 16 THEN
    		SIGNAL SQLSTATE '45000'
    		SET MYSQL_ERRNO = 10021, MESSAGE_TEXT = 'Numéro de téléphone trop court ou trop long';
    	END IF;
     
    	-- Enregistrement du numéro de téléphone
    	INSERT INTO te_telephone_tel (tel_id_personne, tel_id_type_telephone, tel_numero)
    	VALUES (id_personne, id_type_tel, numero);
     
    	SET id_telephone = LAST_INSERT_ID(); 
    END;//
    Ça fonctionne bien pour un numéro trop court mais l'exception ne se déclenche pas pour un numéro trop long !
    Du coup, comme je le prévoyais, le numéro est enregistré tronqué dans la BDD.

    EDIT : Je viens d'essayer avec CHAR_LENGTH mais c'est pareil !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Trouvé !
    En tête de ma procédure, j'avais limité la variable numero à la capacité de la colonne : VARCHAR(16). Du coup, cet idiot de MySQL tronque la donnée d'entrée au lieu de donner un message d'erreur ou même un warning !
    Avec un VARCHAR(17), ça fonctionne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 882
    Par défaut
    Salut CinePhil.

    --> https://dev.mysql.com/doc/refman/8.0...unction_length

    Attention : la fonction "length" retoune le nombre d'octets et non le nombre de caractères de votre chaîne de caractères.
    Si ce sont des caractères que vous désirez mesurer, utilisez plutôt "char_length".

    --> https://dev.mysql.com/doc/refman/8.0...on_char-length

    Sinon, les chiffres et les lettres sans accents sont ceux de la table ASCII et occupe 1 octet.

    Pour la longueur du numéro de téléphone, cela dépend du pays.
    Est-ce sous le format national ou international que vous stockez votre numéro ?

    @+

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Attention : la fonction "length" retoune le nombre d'octets et non le nombre de caractères de votre chaîne de caractères.
    Si ce sont des caractères que vous désirez mesurer, utilisez plutôt "char_length".
    Oui, je sais. J'avais tellement l'habitude d'utiliser LENGTH avant de connaître CHAR_LENGTH que j'ai encore de mauvais réflexes, parfois.
    Mais en fait, mon problème n'était pas là.

    Pour la longueur du numéro de téléphone, cela dépend du pays.
    Est-ce sous le format national ou international que vous stockez votre numéro ?
    Ça aussi je sais. Je suis allé voir sur Wikipedia les différentes longueurs et formats des numéros de téléphone et c'est très variable ; il n'y a pas tous les pays mais je n'en ai pas trouvé d'inférieurs à 4 digits.
    Je pense laisser le numéro tel qu'il aura été saisi. En l'occurrence, il y aura une majorité de numéros français classiques à 10 chiffres et quand même un bon paquet de numéros étrangers, principalement africain, et là c'est variable.
    Je verrai à l'usage si je dois augmenter la taille de la colonne pour entrer certains numéros étrangers. Ce sera très rapide si un utilisateur me dit qu'il ne peut pas saisir tel numéro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Mon exception ne fonctionne pas
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 30/01/2014, 20h42
  2. Mon trigger ne se déclenche pas
    Par awalter1 dans le forum SQL
    Réponses: 4
    Dernier message: 23/01/2013, 15h57
  3. Le timeval de mon select ne se déclenche pas
    Par honeydew dans le forum Réseau
    Réponses: 2
    Dernier message: 29/10/2008, 18h33
  4. Mon Exception ne marche pas
    Par Midou dans le forum Accès aux données
    Réponses: 7
    Dernier message: 01/12/2006, 03h46
  5. [trigger] ... qui ne se déclenche pas
    Par bozo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/01/2004, 11h31

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