6

Je reçois une erreur 1064 lorsque j'essaie d'appeler une fonction stockée depuis une procédure stockée. Cela n'arrive que sur la ligne où j'essaie de faire ceci: SET account_id = get_account_id(user);. Quel est le problème et comment puis-je le réparer?Appel de la fonction stockée MySql depuis une procédure stockée provoquant une erreur

compte ID: Fonctions stockées

CREATE DEFINER=`aaron`@`%` FUNCTION `get_account_id`(user VARCHAR(255)) RETURNS int(11) 
BEGIN 
    DECLARE xaccount_id INT DEFAULT 0; 

    #Get Account ID and place into variable used when calling stored procedure that builds the tree structure for the leaf node portfolio id 
    SELECT account_id 
    FROM rst_sessions.session_data 
    WHERE username = user 
    ORDER BY update_date DESC LIMIT 1 
    INTO xaccount_id; 

    RETURN xaccount_id; 
END 

procédure stockée qui tente d'appeler la fonction stockée:

CREATE DEFINER=`aaron`@`%` PROCEDURE `build_report_portfolio_list`(user VARCHAR(255)) 
    READS SQL DATA 
BEGIN 

    DECLARE portf_id INT; 
    DECLARE portf_name VARCHAR(255); 
    DECLARE str_portf_parent_list VARCHAR(455); 
    DECLARE done INT DEFAULT 0; 
    DECLARE account_id INT; 

    SET account_id = get_account_id(user); 
END 
+0

Je ne vois pas le point de la fonction - utilise la requête de la fonction au sein de la procédure stockée. Et je pensais que INTO devait être avant la clause FROM ... –

+0

bien, j'ai laissé de côté le point de la fonction ... la fonction reçoit un nom d'utilisateur et interroge une table pour récupérer le account_id, puis retourne cet identifiant de compte dans une variable appelée account_id, qui est ensuite utilisée pour une autre requête (le code après le "SET account_id") que j'ai omis pour faciliter la lecture ... si je commente la ligne "SET account_id ....." alors je N'obtenez aucune erreur. – Ronedog

Répondre

7

Je ne sais même pas s'il était possible ce que je voulais faire , ce qui peut avoir causé l'erreur. Mais j'ai trouvé un travail en appelant le SF comme un paramètre avec l'appel au SP et l'ai fait pour faire ce que j'avais besoin de faire.

code

est: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

qu'en est-il de la vitesse? –

Questions connexes