gpt4 book ai didi

mysql - mysql存储过程中真的有必要指定out参数吗?

转载 作者:行者123 更新时间:2023-11-30 00:34:16 24 4
gpt4 key购买 nike

我正在mysql中编写一个存储过程,并且正在干预out参数。当我在 SP 定义中指定参数时,执行时出现错误,指出有 N+1 个参数,而只有 N 个参数可用。如果我提到 out 参数的任何值,那么我不会得到任何结果。

如何获取传递的参数?

仅选择值/列并在应用程序层处理事务也是一种好的做法吗?

请提出建议。我是数据库新手(至少擅长编程),对这些概念不是很清楚。

预先感谢您付出的所有时间和努力。

最佳答案

OUT 参数和存储过程的“结果”是两个不相关的东西。

如果您希望通过存储过程将一个或多个结果集返回给客户端,您只需在过程主体中使用 SELECT 语句,并且无论您SELECT,无论是变量,还是字符串或数字文字,都会返回给客户端。

SELECT NOW() AS the_current_time;  -- do this inside the stored procedure

这会将当前时间从系统时钟返回到调用存储过程的客户端,作为名为“the_current_time”的“列”...

OUT 参数在过程中声明变量,当过程结束时,其值将设置回您在调用该过程时在该位置使用的变量中。

DELIMITER $$
CREATE PROCEDURE get_the_time (OUT foo DATETIME)
BEGIN
SET foo = NOW();
END $$
DELIMITER ;

...然后,使用用户定义的变量调用该过程。

CALL get_the_time(@bar);

随后,您会发现过程中变量“foo”中存在的值已被分配给变量@bar。

SELECT @bar;

要捕获输出参数值,您必须在调用过程时用变量填充占位符,这就是您收到 N+1 错误的原因...您没有填充占位符。

INOUTINOUT 变量之间的区别是这样的:

如果从用户定义变量或存储程序变量(当从另一个存储程序调用一个存储过程时)传入 IN 变量,则该变量不会修改原始值。对于 IN 参数,您还可以使用文字作为参数。

OUT 变量将过程内变量的最后一个值返回到调用过程时该位置槽中使用的变量。在程序内部,变量以前的值不可用。

INOUT 变量传入一个值,并且内部变量的最终值被设置回外部变量。

由于 OUTINOUT 可以更改用于调用过程的变量的值,因此在调用过程时不能在这些槽中使用文字,因为显然,文字的值永远不能在过程体内修改。

如果未指定 INOUTINOUT,则假定为 IN

关于mysql - mysql存储过程中真的有必要指定out参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22299599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com