mysql8.0 ,表字段设置了非空,在Navicat中编制了存储过程A,执行插入操作。
CREATE DEFINER=`root`@`localhost` PROCEDURE `A`(
IN p2 VARCHAR ( 80 ),
IN p3 VARCHAR ( 50 )
)
BEGIN
INSERT INTO dwlist (单位名称,统一信用码)
VALUES
(
@p2,
@p3
);
END
在Navicat中点击“运行”,输入参数,结果正常。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的信息,可能是存储过程中的参数名称和实际传入的参数名称不一致导致的问题。在存储过程中,您定义的参数名为 p2 和 p3,但是在 INSERT INTO 语句中使用的是 @p2 和 @p3。应该在 INSERT INTO 语句中使用存储过程中定义的参数名,而不是使用 @ 符号。
尝试修改存储过程,使用定义的参数名来插入数据:
CREATE DEFINER=root@localhost PROCEDURE A(
IN p2 VARCHAR ( 80 ),
IN p3 VARCHAR ( 50 )
)
BEGIN
INSERT INTO dwlist (单位名称, 统一信用码)
VALUES
(
p2,
p3
);
END
然后再次使用 call 语句调用存储过程,传入参数并执行,看是否仍然出现“Column '单位名称' cannot be null”的错误。
该回答引用GPT:可能是因为您在存储过程中使用了@变量来传递参数,而在调用存储过程时没有正确地设置这些变量的值。您可以尝试使用IN参数来传递参数,例如:
CREATE DEFINER='root'@'localhost' PROCEDURE 'A'(
在p2 VARCHAR(80),
在P3中 瓦查尔 ( 50 )
)
开始
INSERT INTO dwlist (单位名称,统一信用码)
值(p2、p3);
结束
然后在调用存储过程时,使用类似于以下的语法来传递参数:
CALL A('单位名称的值', '统一信用码的值');
这样应该可以解决您遇到的问题。