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