MySQL:在存储过程中将多个字段选择为多个变量

aHu*_*ter 98 mysql sql stored-procedures sql-function

我可以在MySQL的同一个选择查询中将多个列选择为多个变量吗?

例如:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;
Run Code Online (Sandbox Code Playgroud)

这个的正确语法是什么?

mar*_*ton 201

您的语法不太正确:您需要在INTO之前按顺序列出字段,并在以下列出相应的目标变量:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName
Run Code Online (Sandbox Code Playgroud)

  • +1.这是T-SQL语法更清晰的情况.将这些作为单独的列表导致与DECLARE CURSOR和FETCH相同的维护问题(不是我,呃,使用那些). (6认同)

sij*_*yan 10

========== ==========建议

@martin clayton答案是对的,但这只是一个建议.

请避免在存储过程中使用模糊变量.

示例:

SELECT Id, dateCreated
INTO id, datecreated
FROM products
WHERE pName = iName
Run Code Online (Sandbox Code Playgroud)

上面的例子会导致错误(空值错误)

下面给出的例子是正确的.我希望这是有道理的.

示例:

SELECT Id, dateCreated
INTO val_id, val_datecreated
FROM products
WHERE pName = iName
Run Code Online (Sandbox Code Playgroud)

您还可以通过引用表来明确指出它们,例如:

[信用:maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName
Run Code Online (Sandbox Code Playgroud)


iba*_*bai 5

除了 Martin 的答案之外,您还可以在查询末尾添加 INTO 部分以使查询更具可读性:

SELECT Id, dateCreated FROM products INTO iId, dCreate
Run Code Online (Sandbox Code Playgroud)