2010-10-19 4 views
4

Je viens de commencer à créer une fonction stockée c'est ma première fois donc j'ai quelques problèmes. Actuellement, j'appelle la fonction en utilisant SELECT test(); (test est le nom de la fonction pour l'instant). Je veux envoyer un nombre à la fonction (identification de nom d'utilisateur) et avoir le nom d'utilisateur retourné.Paramètre de la fonction stockée mysql

J'ai ceci fonctionnant en employant SELECT test(1); 1 est l'identification d'un utilisateur dans la table. Cela semble fonctionner comme le nom d'utilisateur est retourné, mais si je tape n'importe quel nombre le même nom d'utilisateur est retourné aussi. J'ai défini le paramètre ID int.

Ai-je raison de penser que le mot-clé INTO mettra la valeur du nom d'utilisateur dans la variable new_username? Si je le lance sans INTO j'obtiens l'erreur:

Not allowed to return a result set from a function

Ai-je fait des erreurs évidentes dans ce domaine, je l'espère, je nai fait il totalement mal. Merci pour tout conseil :).

Edit: Je viens d'ajouter un peu plus de lignes dans ma table, je reçois maintenant l'erreur:

Result consisted of more than one row

version sql complète:

CREATE DEFINER=`elliotts`@`%` FUNCTION `test`(ID int) 
RETURNS varchar(32) CHARSET latin1 
BEGIN 

    DECLARE new_username VARCHAR(32); 

    SELECT `username` 
     INTO new_username 
     FROM `users` 
    WHERE `ID` = ID; 

    return new_username; 

END 

Répondre

4

Utilisation:

DROP FUNCTION IF EXISTS `example`.`test` $$ 
CREATE FUNCTION `example`.`test` (param INT) RETURNS VARCHAR(32) 
BEGIN 

    DECLARE new_username VARCHAR(32); 

    SELECT `username` 
     INTO new_username 
     FROM `users` 
    WHERE `ID` = param; 

    RETURN COALESCE(new_username, 'Username not found'); 

END $$ 

Notez que la longueur VARCHAR de la valeur RETURN correspond à la variable. uld correspond à la longueur de colonne que vous voulez retourner.

+0

Merci J'ai essayé mais obtenez l'erreur: Impossible de créer une fonction à partir d'une autre routine stockée – Elliott

+0

@Elliot: Exécutez le code dans un onglet de script séparé - en quelque sorte vous avez réussi à le coller à l'intérieur d'un existant fonction/déclaration de procédure stockée. –

+0

@Elliot: Que voulez-vous faire si le nom d'utilisateur est NULL? Vous vous rendez compte que la valeur de retour sera également NULL si quelqu'un exécute la fonction avec une valeur de paramètre qui n'existe pas dans la table? –

Questions connexes