Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/10/2007, 11h53   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
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 :
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 :
! 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
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 10h28   #2
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
J'ai trouvé, c'est beaucoup plus simple que ce que j'imaginais :

Code :
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
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web