【发布时间】:2015-12-14 15:20:22
【问题描述】:
我正在尝试在 mySQL 上执行插入存储过程作为一个小测试。 最终结果将所有零插入一行,而不是传递给定义器的值。
我的代码:
CREATE PROCEDURE `Test` (
IN IDvar int,
IN FirstNamevar nvarchar(50),
IN LastNamevar nvarchar(50),
IN Nationalityvar nvarchar(50),
In Agevar nvarchar(50),
)
BEGIN
INSERT INTO testtable (
ID,
FirstName,
LastName,
Nationality,
Age)
VALUES(
IDvar,
FirstNamevar,
LastNamevar,
Nationalityvar,
Agevar);
END
我点击应用,得到如下代码来构造存储过程
USE `testdb`;
DROP procedure IF EXISTS `Test`;
DELIMITER $$
USE `testdb` $$
CREATE PROCEDURE `Test` (
IN IDvar int,
IN FirstNamevar nvarchar(50),
IN LastNamevar nvarchar(50),
IN Nationalityvar nvarchar(50),
In Agevar nvarchar(50),
)
BEGIN
INSERT INTO testtable (
ID,
FirstName,
LastName,
Nationality,
Age)
VALUES(
IDvar,
FirstNamevar,
LastNamevar,
Nationalityvar,
Agevar);
END$$
DELIMITER;
如果我查看构造的存储过程代码,我会得到以下信息
CREATE DEFINER=`root`@localhost` PROCEDURE `Test`(
IN IDvar int,
IN FirstNamevar nvarchar(50),
IN LastNamevar nvarchar(50),
IN Nationalityvar nvarchar(50),
In Agevar nvarchar(50),
)
BEGIN
INSERT INTO testtable (
ID,
FirstName,
LastName,
Nationality,
Age)
VALUES(
IDvar,
FirstNamevar,
LastNamevar,
Nationalityvar,
Agevar);
END
当我使用值执行这个存储过程时:
IDvar = 3
FirstNamevar = TestFirstName
LastNamevar = TestLastName
Nationalityvar = GER
Age = 20
我知道了
set @IDvar = 0;
set @FirstNamevar = '0';
set @LastNamevar = '0';
set @Nationalityvar = '0';
set @Agevar = '0';
call testdb.Test(@IDvar, @FirstNamevar, @LastNamevar, @Nationalityvar, @Agevar);
select @IDvar, @FirstNamevar, @LastNamevar, @Nationalityvar, @Agevar;
显然,这以一个全为零的行结束。有人知道为什么会这样吗?
干杯
【问题讨论】:
-
在 Agevar nvarchar(50),) 中发现了一个拼写错误,末尾有逗号。请注意,这不在 mySQL 的代码中,这是我在此处输入时的错误
标签: mysql stored-procedures parameters insert