6

Я получаю ошибку 1064 при попытке вызвать хранимую функцию из хранимой процедуры. Это происходит только на линии, где я пытаюсь это сделать: SET account_id = get_account_id(user);. В чем проблема и как я могу это исправить?MySql вызов хранимой функции из хранимой процедуры, вызывающей ошибку

данные ID Хранится Функции:

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 

хранимая процедура, которая пытается вызвать хранимую функцию:

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

Я не вижу смысла функции - используйте запрос от функции внутри хранимой процедуры. И я, хотя это INTO должно было быть перед предложением FROM ... –

+0

ну, я оставил точку функции ... функция получает имя пользователя и запрашивает таблицу для извлечения account_id, а затем возвращает этот идентификатор учетной записи обратно в переменную, называемую account_id, которая затем используется для другого запроса (код после «SET account_id»), который я забыл для удобства чтения ... если я прокомментирую строку «SET account_id .....», тогда я не получайте никаких ошибок. – Ronedog

ответ

7

Я даже не знаю, если это было возможно, что я пытался сделать , что могло вызвать ошибку. Но я нашел работу вокруг, вызвав SF в качестве параметра с вызовом SP и заставил его делать то, что мне было нужно.

Кодекс: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

как насчет скорости? –

Смежные вопросы