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 :

Problème d'execution d'une fonction..


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut Problème d'execution d'une fonction..
    J'ai créé une fonction qui pprends 4 arguments char et retourner un char:
    CREATE FUNCTION test(arg1 char(255), arg2 char(255), arg3 char(255), arg4 char(255))
    RETURNS char(255)
    BEGIN
    DECLARE val1, val2, val3, val4 INT;
    SET val1 = ASCII(arg1);
    SET val2 = ASCII(arg2);
    SET val3 = ASCII(arg3);
    SET val4 = ASCII(arg4);
    IF (0 NOT IN (val1,val2,val3,val4)) AND (32 NOT IN (val1,val2,val3,val4)) THEN
    RETURN CONCAT(CONCAT(arg1 , ' ', arg2),' - ',CONCAT(arg3 , ' ', arg4));
    ELSEIF (0 NOT IN (val1,val2)) AND (32 NOT IN (val1,val2)) THEN
    RETURN CONCAT(arg1 , ' ', arg2);
    ELSE
    RETURN 'rien';
    END IF;
    END;
    La condition IF verifie si les champs sont vides ou contiennent un simple éspace...
    avec la requète test suivante, tous marche bien:
    select test('18','ans','20','years');
    ==>18 ans - 20 years
    mais quand je l'applique à mes champs de table, c'est le dernier else qui est exècuté bien que les champs contiennent les memes valeurs de la requete test:
    select test(tab.year1, tab.str1, tab.year2, tab.str2) from tab where tab.year1='18';
    ==> rien
    Je ne comprends pas ce qui cloche ?
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

  2. #2
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    Juste pour info, chez moi ca passe sans probleme...

    t´es sur que tab.year1 et que tab.str1 ne sont pas vides, ni qu´ils commencent par un espace?

  3. #3
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    En fait ça marche manitenant et je n'ai aucune idée pourquoi ça déconait avant
    J'aimerai maintenant tester si plusieurs variable sont NULL, j'ai éssayé de faire comme là haut:
    NULL NOT IN (arg1,arg2,arg3....,arg10)
    mais ça ne marche pas, d'après mes recherches la seule façon de tester si null est d'utiliser IS NOT NULL ou NOT NULL ou encore la fonction ISNULL() qui retourne 1 si c'est la cas et 0 sinon, donc dans mon cas ce sera par exemple:
    (arg1 IS NOT NULL) AND (arg2 IS NOT NULL) AND (arg3 IS NOT NULL) ... AND (arg10 IS NOT NULL)
    Ce qui sera lourd, je me demandais s'il n'y avait pas un autre moyen de faire?
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,
    Tu peux utiliser la fonction COALESCE pour ça... Elle, elle prend plusieurs arguments (tous les arguments que tu veux) et renvoit le premier non NULL, et si ils sont tous NULL alors elle renvoit NULL.
    Donc pour tester qu'il y a au moins un argument non null, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE COALESCE(arg1,arg2,arg3....,arg10) IS NOT NULL
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/01/2014, 07h53
  2. Réponses: 1
    Dernier message: 29/04/2013, 21h30
  3. Postgre 8.3 : Problème lors de l'execution d'une fonction
    Par palassou dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/12/2009, 14h44
  4. Problème d'execution d'une fonction
    Par 12_darte_12 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 17/03/2006, 11h37
  5. Execution d'une fonction lors de l'appui sur CTRL+ALT+I
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 17/03/2004, 01h35

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