【问题标题】:MySQL: Selecting multiple fields into multiple variables in a stored procedureMySQL:在存储过程中选择多个字段到多个变量中
【发布时间】:2011-01-27 21:01:46
【问题描述】:

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

例如:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;

正确的语法是什么?

【问题讨论】:

    标签: sql mysql stored-procedures sql-function


    【解决方案1】:

    你的syntax不太对:你需要在INTO之前依次列出字段,之后是对应的目标变量:

    SELECT Id, dateCreated
    INTO iId, dCreate
    FROM products
    WHERE pName = iName
    

    【讨论】:

    • +1。这是 T-SQL 语法更清晰的情况。将这些作为单独的列表会导致与 DECLARE CURSOR 和 FETCH 相同的维护问题(不是我,呃,曾经使用过这些)。
    • Pl/Sql 也一样。
    【解决方案2】:

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

    @martin Clayton 答案是正确的,但这只是一个建议。

    请避免在存储过程中使用不明确的变量。

    例子:

    SELECT Id, dateCreated
    INTO id, datecreated
    FROM products
    WHERE pName = iName
    

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

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

    例子:

    SELECT Id, dateCreated
    INTO val_id, val_datecreated
    FROM products
    WHERE pName = iName
    

    您还可以通过引用表格使它们明确,例如:

    [信用:maganap]

    SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
    WHERE pName = iName
    

    【讨论】:

    • 您也可以通过引用表格使它们明确,例如:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
    【解决方案3】:

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

    SELECT Id, dateCreated FROM products INTO iId, dCreate
    

    【讨论】:

    • @KusalDissanayake 这个问题是针对 MySQL 提出的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多