Mi procedimiento almacenado siempre devuelve un valor nulo cuando intento seleccionarlo. Investigué un poco y tengo que especificar SALIDA en algún lugar. No estoy seguro de dónde o cómo hacer eso.

delimiter $$

Create Procedure ClientPurchases (IN idClient INT, outClientAvgPurchases DECIMAL (4,2))
BEGIN 

DECLARE PurchasesAvg DECIMAL(4,2) ;

set PurchasesAvg=
(SELECT AVG(PurchaseAmount) 
FROM Purchase
inner join Client on idClient=Client_idClient);
SET outClientAvgPurchases= PurchasesAvg;

END$$


CALL ClientPurchase(3, @purchase );

SELECT  @purchase as 'Purchase Total';
1
Catalina 14 dic. 2016 a las 23:12

2 respuestas

La mejor respuesta

OUT es una palabra clave que debe preceder al nombre del parámetro:

Create Procedure ClientPurchases (IN idClient INT, OUT ClientAvgPurchases DECIMAL (4,2))
...
SET ClientAvgPurchases= PurchasesAvg;
2
shmosel 14 dic. 2016 a las 20:17

Puede declarar un argumento de procedimiento como IN, OUT o INOUT.

Create Procedure ClientPurchases (
    IN idClient INT, 
    OUT outClientAvgPurchases DECIMAL (4,2))
  . . .

Más información sobre esto en http://dev.mysql.com /doc/refman/5.7/en/create-procedure.html

2
Bill Karwin 14 dic. 2016 a las 20:16