Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL stored procedure return value

I have to create an SP that returns a value if it's valid or not. But it doesn't return anything and I don't know, why?

CREATE DEFINER=`root`@`localhost` PROCEDURE `validar_egreso`(     IN codigo_producto VARCHAR(100),     IN cantidad INT,     OUT valido INT(11) ) BEGIN     DECLARE resta INT(11);     SET resta = 0;      SELECT (s.stock - cantidad) INTO resta     FROM stock AS s     WHERE codigo_producto = s.codigo;      IF (resta > s.stock_minimo) THEN         SET valido = 1;     ELSE         SET valido = -1;     END IF;     SELECT valido; END 
like image 355
Juanma Avatar asked Nov 05 '14 15:11

Juanma


People also ask

Can SQL stored procedure return value?

Return Value in SQL Server Stored ProcedureIn default, when we execute a stored procedure in SQL Server, it returns an integer value and this value indicates the execution status of the stored procedure. The 0 value indicates, the procedure is completed successfully and the non-zero values indicate an error.

How many values can a given stored procedure return in MySQL?

MySQL stored function returns only one value. To develop stored programs that return multiple values, you need to use stored procedures with INOUT or OUT parameters.

Can we return values from procedure?

Return Value in Stored Procedure. Return values can be used within stored procedures to provide the stored procedure execution status to the calling program. You can create your own parameters that can be passed back to the calling program. By default, the successful execution of a stored procedure will return 0.

Can we use return in stored procedure?

You can use one or more RETURN statements in a stored procedure. The RETURN statement can be used anywhere after the declaration blocks within the SQL-procedure-body. To return multiple output values, parameters can be used instead. Parameter values must be set before the RETURN statement runs.


2 Answers

You have done the stored procedure correctly but I think you have not referenced the valido variable properly. I was looking at some examples and they have put an @ symbol before the parameter like this @Valido

This statement SELECT valido; should be like this SELECT @valido;

Look at this link mysql stored-procedure: out parameter. Notice the solution with 7 upvotes. He has reference the parameter with an @ sign, hence I suggested you add an @ sign before your parameter valido

I hope that works for you. if it does vote up and mark it as the answer. If not, tell me.

like image 156
mfredy Avatar answered Sep 28 '22 02:09

mfredy


Add:

  • DELIMITER at the beginning and end of the SP.
  • DROP PROCEDURE IF EXISTS validar_egreso; at the beginning
  • When calling the SP, use @variableName.

This works for me. (I modified some part of your script so ANYONE can run it with out having your tables).

DROP PROCEDURE IF EXISTS `validar_egreso`;  DELIMITER $$  CREATE DEFINER='root'@'localhost' PROCEDURE `validar_egreso` (     IN codigo_producto VARCHAR(100),     IN cantidad INT,     OUT valido INT(11) ) BEGIN      DECLARE resta INT;     SET resta = 0;      SELECT (codigo_producto - cantidad) INTO resta;      IF(resta > 1) THEN        SET valido = 1;     ELSE        SET valido = -1;     END IF;      SELECT valido; END $$  DELIMITER ;  -- execute the stored procedure CALL validar_egreso(4, 1, @val);  -- display the result select @val; 
like image 41
biniam Avatar answered Sep 28 '22 02:09

biniam