gpt4 book ai didi

MySQL-存储过程-尝试使用输出参数时的怪异

转载 作者:行者123 更新时间:2023-11-29 14:57:16 25 4
gpt4 key购买 nike

说实话,我现在感觉自己很蠢。但这根本不起作用

场景
我有一个包含输出参数的存储过程。我正在尝试在该参数中选择一个值。这看起来很简单,但它仍然给我错误的结果。我检查了许多在线资源,并且我确信我正在努力正确地做到这一点。


代码

DELIMITER //
CREATE PROCEDURE `spGetId`(
IN ParamA VARCHAR(32),
OUT OutputId INT
)
BEGIN
SELECT `id` INTO OutputId
FROM `Table`
WHERE `column_a` = ParamA;
END//

CALL spGetId('foobar', @Bloop)//
SELECT @Bloop//


结果
我在这个表中有两行,它们的 ID 是“1”和“2”。无论 SELECT 语句是否匹配任何内容,我得到的结果都是“31”。我尝试了很多变体,包括完全删除 WHERE 子句并让 SELECT 返回 COUNT(1) 到参数中(这给了我结果“32”,尽管只有 2 行),并且我尝试过“声明"在存储过程调用中使用 @Bloop 变量之前,使用 SET @Bloop = 0

如果您对发生这种情况的原因有任何见解,以及我可以采取哪些措施使其返回正确的值,我将非常感激。另外,如果您可以向我展示如何使用带有返回值的存储函数来实现相同的预期结果,我将不胜感激!我想要的方法是使用存储函数,但我遇到了类似的问题,然后放弃并尝试使用存储过程,却发现我得到了类似的结果。

您能提供的任何内容都会有帮助!

编辑:

CREATE TABLE `Table` (
`id` int(11) NOT NULL auto_increment,
`column_a` varchar(32) character set utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

mysql> SELECT * FROM Table;
+------+----------+
| id | column_a |
+------+----------+
| 1 | asdf |
| 2 | foobar |
+------+----------+

当我使用任何参数调用 spGetId() 时,它返回值“31”(即使参数是“foobar”,它应该返回整数值“2”(或 ascii 0x32))。如果我修改 spGetId() 以返回表的总行数,则返回“32”,而不是“2”。

最佳答案

您的存储过程正在运行。我认为它返回的是字符“1”的 ascii 值而不是整数值 1。

关于MySQL-存储过程-尝试使用输出参数时的怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289809/

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