6

Ich erhalte einen 1064 Fehler beim Versuch, eine gespeicherte Funktion aus einer gespeicherten Prozedur aufrufen. Es passiert nur auf der Linie, wo ich das versuche: SET account_id = get_account_id(user);. Was ist das Problem und wie kann ich es beheben?MySql Aufruf gespeicherte Funktion aus einer gespeicherten Prozedur verursacht Fehler

Konto-ID gespeicherten Funktionen:

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 

gespeicherte Prozedur, die die gespeicherte Funktion aufzurufen versucht:

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

Ich sehe nicht den Punkt der Funktion - verwenden, um die Abfrage von der Funktion innerhalb der gespeicherten Prozedur. Und ich dachte, dass INTO vor der FROM-Klausel sein müsste ... –

+0

Nun, ich habe den Punkt der Funktion weggelassen ... die Funktion empfängt einen Benutzernamen und fragt eine Tabelle ab, um die account_id abzurufen, und gibt dann diese Konto-ID zurück eine Variable namens account_id, die dann für eine andere Abfrage verwendet wird (der Code nach der "SET account_id"), die ich zum leichteren Lesen weggelassen habe ... wenn ich die Zeile "SET account_id ....." auskommentiere, dann I Erhalte keinen Fehler. – Ronedog

Antwort

7

Ich weiß nicht einmal, ob es möglich war, was ich zu tun versuche, , die möglicherweise den Fehler verursacht haben. Aber ich habe eine Arbeit gefunden, indem ich den SF als einen Parameter mit dem Aufruf an den SP genannt habe und ihn dazu gebracht habe, das zu tun, wozu ich es brauchte.

-Code ist: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

Wie wäre es mit Geschwindigkeit? –