6

Kayıtlı bir işlevden saklanan bir işlevi çağırmaya çalışırken 1064 hatası alıyorum. Sadece bunu yapmaya çalıştığım satırda olur: SET account_id = get_account_id(user);. Sorun nedir ve nasıl düzeltebilirim?MySql çağrısı saklı yordam içinde saklanan bir işlevin içinde hataya neden oluyor

Hesap Kimliği Saklı Fonksiyonlar:

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 
saklanan Fonksiyonu çağırmak için çalışıyor

Saklı Prosedür:

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

Ben fonksiyonunun nokta görmüyorum - saklı yordam içindeki işlevinden sorguyu kullanın. Ve ben bu INTO FROM yan tümcesi önce olması gerekiyordu olsa da ... –

+0

iyi, işlev noktasını bıraktım ... işlev bir kullanıcı adı alır ve account_id almak için bir tablo sorgular, sonra bu hesap kimliğini geri döndürür Daha sonra başka bir sorgu için ("SET account_id" den sonraki kod) okuma kolaylığı için dışarıda kaldığım account_id adında bir değişken ... "SET account_id ....." satırına yorum yaparsam herhangi bir hata alma. – Ronedog

cevap

7

o benim yapmaya çalıştığım ne mümkün olsaydı ben bile bilmiyorum Hataya neden olmuş olabilir. Ancak, SF'yi SP'ye çağrı ile bir parametre olarak çağırarak bir çalışma buldum ve bunu yapmak için ihtiyacım olanı yaptı.

Kod geçerli: CALL build_report_portfolio_list(get_account_id('username_here'));

+0

Hız hakkında ne dersiniz? –