Jua*_*nma 19 mysql stored-procedures return-value
我必须创建一个SP,如果它有效,则返回一个值.但它不返回任何东西,我不知道,为什么?
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
Run Code Online (Sandbox Code Playgroud)
mfr*_*edy 22
您已正确完成存储过程,但我认为您没有valido正确引用该变量.我正在看一些例子,他们在参数之前放了一个@符号@Valido
这句话SELECT valido;应该是这样的SELECT @valido;
看看这个链接mysql stored-procedure:out参数.请注意7个upvotes的解决方案.他用@符号引用了参数,因此我建议你在参数valido之前添加一个@符号
我希望这对你有用.如果它确实投票并将其标记为答案.如果没有,请告诉我.
加:
DELIMITER 在SP的开头和结尾.validar_egreso; 在开始@variableName.这适合我.(我修改了脚本的某些部分,因此任何人都可以在没有表的情况下运行它).
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84515 次 |
| 最近记录: |