6

Recibo un error 1064 cuando intento llamar a una función almacenada desde un procedimiento almacenado. Solo sucede en la línea donde trato de hacer esto: SET account_id = get_account_id(user);. ¿Cuál es el problema y cómo puedo solucionarlo?MySql llamando a la función almacenada desde un procedimiento almacenado que causa el error

Cuenta ID almacenado Funciones:

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 

procedimiento almacenado que está intentando llamar a la función almacenada:

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

no veo el punto de la función - utilizar la consulta de la función en el procedimiento almacenado. Y pensé que INTO necesitaba estar antes de la cláusula FROM ... –

+0

Bueno, dejé fuera el punto de la función ... la función recibe un nombre de usuario y consulta una tabla para recuperar el account_id, luego devuelve ese ID de cuenta nuevamente a una variable llamada account_id, que luego se utiliza para otra consulta (el código después de "SET account_id") que dejé fuera para facilitar la lectura ... si hago un comentario sobre la línea "SET account_id ....." entonces no obtengas ningún error – Ronedog

Respuesta

7

Ni siquiera sé si era posible lo que yo estaba tratando de hacer , que puede haber causado el error. Pero encontré un trabajo alternativo llamando a SF como un parámetro con la llamada al SP y lo hice para hacer lo que necesitaba.

Código es: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

¿qué tal la velocidad? –

Cuestiones relacionadas