gpt4 book ai didi

MySQL SELECT 对存储过程中的 NOT NULL 列返回 NULL

转载 作者:行者123 更新时间:2023-11-29 12:42:55 24 4
gpt4 key购买 nike

我有一个存储过程,在其中我试图循环一个表中的多个 ID 并将它们插入到另一个表中...问题是 ID 在循环中显示为 NULL。

出于调试目的,我创建了一个名为 test 的表,它有两列,分别名为 var_namevalue。我还制作了一个这样的存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `myProcedure`(@parent INT(11))
BEGIN
INSERT INTO `test`
(`var_name`, `value`)
VALUES
('parent', @parent);

INSERT INTO test (`var_name`, `value`)
SELECT 'id', `id`
FROM `mytable`
WHERE `parent` = @parent;
END

mytable有很多列,但id是主键,显然NOT NULL,parent允许NULL。 idparentvalue 列均为 INT(11)。

声明如下:

CALL myProcedure(1);

测试中产生以下结果:

+----------+-------+
| var_name | value |
+----------+-------+
| 'parent' | 1 |
| 'id' | NULL |
| 'id' | NULL |
| 'id' | NULL |
| 'id' | NULL |
| 'id' | NULL |
| 'id' | NULL |
+----------+-------+

“id”行数与 mytableparent = 1 的行数匹配,但 value 始终为 NULL。运行以下查询:

SELECT `id` FROM `mytable` WHERE `parent` = 1;

产生预期结果:

+----+
| id |
+----+
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+----+

这是怎么回事?

最佳答案

不太确定给定的程序出了什么问题,但我尝试创建一个与您类似的程序,并且效果很好。这是我所做的

mysql> create table test (var_name varchar(100),value int);
Query OK, 0 rows affected (0.10 sec)

mysql> create table mytable (id int, parent int);
Query OK, 0 rows affected (0.07 sec)

mysql> insert into mytable values (2,1),(3,1),(4,1),(5,1),(6,1),(7,1);
Query OK, 6 rows affected (0.02 sec)
Records: 6 Duplicates: 0 Warnings: 0

然后添加以下程序

delimiter //
CREATE PROCEDURE myProcedure(parent INT(11))
BEGIN
declare parent_id int ;
set @parent_id := parent ;

INSERT INTO `test`
(`var_name`, `value`)
VALUES
('parent', @parent_id);

INSERT INTO test (`var_name`, `value`)
SELECT 'id', `id`
FROM `mytable`
WHERE `parent` = @parent_id;
END; //

mysql> CALL myProcedure(1);
Query OK, 6 rows affected (0.05 sec)

mysql> select * from test ;
+----------+-------+
| var_name | value |
+----------+-------+
| parent | 1 |
| id | 2 |
| id | 3 |
| id | 4 |
| id | 5 |
| id | 6 |
| id | 7 |
+----------+-------+
7 rows in set (0.00 sec)

我唯一改变的是在过程中使用变量来保存参数值并在查询中使用它。

关于MySQL SELECT 对存储过程中的 NOT NULL 列返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865876/

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