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
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.
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.
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.
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.
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.
Add:
DELIMITER
at the beginning and end of the SP.validar_egreso
; at the beginning@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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With