2013-04-25 62 views
0

我在mysql中有一個過程,它有4個參數作爲輸入和OUTPUT的3個參數,一個參數的OUTPUT不返回任何內容(空)。呼叫過程沒有返回值mysql

DELIMITER $$ 
drop procedure if exists `cierreMes`$$ 
create procedure cierreMes (in tarjeta varchar(100),in bancoBus varchar(100),in mes int,in anyo int, out total int, out nulas int, out erroneas int) 
begin 
    declare stockActual int default 0; 
    declare cantidad int; 
    /*declare xcantidad,xnulas,xerroneas int;*/ 
    declare entrada, salida int default 0; 
    declare total int default 0; 


    select stock 
     into stockActual 
    from almacen 
    where idProducto = 
     (select idProducto from productos where productos.banco = bancoBus and productos.plastico = tarjeta); 

    call entradasSalidas(tarjeta,bancoBus,mes,anyo,@ent,@sal); 
    set entrada = @ent; 
    set salida = @sal; 

    call obtenerMovimientosMes(tarjeta,bancoBus,mes,anyo,@cant,@nul,@err); 
    set cantidad = @cant; 
    set nulas = @nul; 
    set erroneas = @err;  

    set total =(stockActual + entrada) - (salida + cantidad); 

    select total; 

end$$ 
DELIMITER ; 

call cierreMes('4B MC','SANTANDER',3,2013, @total, @nulas, @erroneas); 

select @total, @nulas, @erroneas; 

,當我做 「呼」 @nulas和@erroneas返回一個值,但@total 什麼。

選擇總數,其工作正常。但沒有返回值,在這個select中:select @total,@nulas,@erroneas; @total爲null。

+0

嗨!它解決了。問題在於這一行:聲明總的int默認爲0;刪除問題消失。 – GdePablos 2013-04-25 12:09:51

回答

0

您計算total這個公式:

set total =(stockActual + entrada) - (salida + cantidad); 

如果在計算中使用的值中的一個是NULL,那麼總將NULL

我可以看到entradasalidacantidad的設置語句。但是stockActual的價值是多少?

看來你錯過了一個設置值爲stockActual的語句。

+0

感謝它的解決。問題是我inizialite總:聲明總的int默認0;並沒有必要,因爲它頭腦中的混亂。 – GdePablos 2013-04-26 11:21:01