call stored procedure retun value null
Hi,
I created this stored procedure:
DELIMITER $$
CREATE DEFINER=`mysqluser`@`%` PROCEDURE `SP_PORTAFOGLIO_OPEN_ORDER`(IN I_id_testa INT(11), IN
I_DataOra_aper DATETIME,IN I_Valore_lotto_std DECIMAL(12,6), OUT Open_order_ TEXT, OUT PL DECIMAL(12,6))
BEGIN
DECLARE V_Anno int(11) ;
DECLARE V_Mese int(11) ;
DECLARE V_Settimana int(11) ;
DECLARE V_ID_testa int(11) ;
DECLARE V_Strategy_key varchar (1000);
DECLARE V_EA varchar (20);
DECLARE V_Valuta varchar (8);
DECLARE V_Operazione varchar (50);
DECLARE V_Ordine INT(11) ;
DECLARE V_Lotti DECIMAL(12,6);
DECLARE V_Risultato DECIMAL(12,6);
DECLARE V_Saldo DECIMAL(12,6);
DECLARE V_Prezzo DECIMAL(12,6);
DECLARE V_Saldo_tmp DECIMAL(12,6) DEFAULT 0;
DECLARE V_RESA DECIMAL(12,6);
DECLARE V_SYS CHAR (6) ;
DECLARE n INT(11) DEFAULT 1;
DECLARE V_Periodo varchar (100);
DECLARE V_Tipo_analisi varchar (100);
DECLARE V_Deposito_ini DECIMAL(12,6);
DECLARE V_DataOra_aper Datetime;
DECLARE Lotti_new DECIMAL(12,6) ;
DECLARE V_prezzo_aper DECIMAL(12,6) ;
DECLARE Valore_lotto_std DECIMAL(12,6) DEFAULT 100000;
DECLARE PL_ DECIMAL(12,6) DEFAULT 0;
DECLARE V_PL DECIMAL(12,6) DEFAULT 0 ;
DECLARE Open_order_ TEXT DEFAULT "";
DECLARE V_Open_price DECIMAL(12,6) ;
set n =1;
BEGIN
DECLARE no_more_rows INT DEFAULT 0;
DECLARE cursor1 CURSOR FOR
SELECT portafoglio_ordini.Ordine,portafoglio_ordini.Operazione, portafoglio_ordini.EA,`portafoglio_ordini`.`Valuta`,
sym.Price_open,portafoglio_ordini.prezzo_aper,
sum(
IFNULL(
CASE WHEN portafoglio_ordini.Operazione ='buy' THEN (sym.Price_open - portafoglio_ordini.prezzo_aper)* I_Valore_lotto_std * portafoglio_ordini.Lotti_new
else (portafoglio_ordini.prezzo_aper- sym.Price_open)* I_Valore_lotto_std * portafoglio_ordini.Lotti_new end
,0)
) AS PL
FROM portafoglio_ordini inner join sym on (portafoglio_ordini.DataOra_aper=sym.datetime AND portafoglio_ordini.Valuta = sym.Symbol)
WHERE portafoglio_ordini.DataOra_aper <= I_DataOra_aper
AND portafoglio_ordini.DataOra_chiu > I_DataOra_aper
AND portafoglio_ordini.Ordine_incluso ="SI"
AND ID_testa = I_id_testa;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET no_more_rows = 1;
/* Apro il cursorere e mi giro tutte i record */
OPEN cursor1;
REPEAT
FETCH cursor1 INTO V_Ordine, V_Operazione,V_EA, V_Valuta,V_Open_price, V_prezzo_aper, V_PL;
IF NOT no_more_rows THEN
SET Open_order_ = CONCAT( Open_order_, '[',V_Ordine,'-', V_Operazione,'-',V_EA,'-',V_Valuta,'-',V_Open_price,'-',V_prezzo_aper,'-', V_PL,']');
SET PL_ = PL_ + V_PL;
set n = n +1;
END IF;
UNTIL no_more_rows
END REPEAT;
CLOSE cursor1;
END;
select Open_order_ , PL_ ;
I call it with this syntax:
CALL SP_PORTAFOGLIO_OPEN_ORDER (I_id_testa , V_DataOra_aper, Valore_lotto_std, @Open_order ,@PL );
SELECT @Open_order ,@PL;
I have this result:
Open_order_ [1-buy-EA Trend Followin-EURUSD-1.327160-1.327260-0.000000]
PL_ 0.000000
@Open_order null
@PL null
Why do i have return null? where am I wrong?
thank you very much