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 :

Tester existence d'un SELECT par une fonction ?


Sujet :

SQL Procédural MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut Tester existence d'un SELECT par une fonction ?
    Bonjour,

    Je voudrais écrire une fonction (peut-être est-ce une procédure du coup ?) qui me renvoie 0 ou 1 selon l'existence d'un résultat :

    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
     
    DELIMITER $$
     
    DROP FUNCTION IF EXISTS `test_cdf`.`existence`$$
    CREATE FUNCTION `test_cdf`.`existence` (ps TEXT) 
    RETURNS INT DETERMINISTIC
    BEGIN
     DECLARE fnd INT DEFAULT 0;
     main: BEGIN
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET fnd = 1;
     SELECT probeset_name FROM test_cdf.probeset 
     WHERE probeset_name = ps;
     END main;
     RETURN fnd;
    END$$
     
    DELIMITER ;
    Avec comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! Not allowed to return a result set from a function
    J'ai essayé avec IF EXISTS SELECT... et IF ISNULL SELECT mais ça capote aussi...

    Question très subsidiaire: j'utilise Perl avec DBD::MySQL, sauriez-vous s'il y a moyen directement de tester ceci ? J'ai essayé $sth->prepare("SELECT...") || warn "..." mais il n'y a pas de code de retour. Le while(my @array = $sth->fetchrow_array) ne s'effectue pas s'il n'y a pas de réponse, je ne peux pas contrôler l'existance à cette étape non plus.

    Sauriez vous comment faire ceci ?

    En vous remerciant,

    C. Tobini

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    J'ai trouvé, c'est beaucoup plus simple que ce que j'imaginais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    BEGIN
     DECLARE retour TINYINT DEFAULT NULL;
     IF (SELECT probeset_name FROM probeset WHERE
     probeset_name = mon_probeset_name_en_arg_de_fonction) IS NULL THEN
      SEt retour = -1;
     ELSE
      SET retour = 0;
     END IF;
     RETURN retour;
    END;
    Puis le retour d'appel de fonction dans Perl DBD::MySQL (ou j'imagine n'importe quel autre connecteur) indique l'existence ou pas de l'argument.

    C. Tobini

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2009, 08h44
  2. Tester l'existence d'un paramètre dans une fonction
    Par olivier1978 dans le forum Programmation (La)TeX avancée
    Réponses: 0
    Dernier message: 16/11/2007, 23h10
  3. Souci avec une formule par une fonction Selection.validation
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 02/08/2007, 22h45
  4. [LG]résultat renvoyé par une fonction
    Par le 27 dans le forum Langage
    Réponses: 3
    Dernier message: 10/12/2003, 10h31
  5. tableau javascript ecrit par une fonction asp
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 03/11/2003, 08h38

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