6

Viene visualizzato un errore 1064 quando si tenta di chiamare una funzione memorizzata da una stored procedure. Succede solo sulla linea in cui provo a fare questo: SET account_id = get_account_id(user);. Qual è il problema e come posso risolverlo?MySql chiama la funzione memorizzata da una stored procedure causando l'errore

ID account memorizzati Funzioni:

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 

stored procedure che sta cercando di richiamare la funzione memorizzata:

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

non vedo il punto della funzione - utilizzare la query dalla funzione all'interno della stored procedure. E anche se INTO doveva essere prima della clausola FROM ... –

+0

beh, ho omesso il punto della funzione ... la funzione riceve un nome utente e interroga una tabella per recuperare l'account_id, quindi restituisce l'ID account di nuovo in una variabile chiamata account_id, che viene poi utilizzata per un'altra query (il codice dopo "SET account_id") che ho omesso per facilità di lettura ... se commento la riga "SET account_id ....." quindi I non ottenere alcun errore. – Ronedog

risposta

7

io non so nemmeno se era possibile quello che stavo cercando di fare , che potrebbe aver causato l'errore. Ma ho trovato un modo per aggirare chiamando SF come parametro con la chiamata al SP e ho ottenuto di fare ciò che avevo bisogno di fare.

Codice è: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

che ne dici di velocità? –