【问题标题】:In MySQL how do I create a stored procedure that takes multiple parameters?在 MySQL 中,如何创建一个带有多个参数的存储过程?
【发布时间】:2012-02-29 04:43:49
【问题描述】:

函数示例: 调用 getThings(amount, place, limit, marginError)

概要:CALL getThings(4, PA, 3, 1.2);

目标示例:

CREATE PROCEDURE getThings(IN amount X, place VARCHAR(30), lim INT, marginError double)
SELECT place, limit, amount
FROM AREA, PRODUCT
WHERE AREA.place=PRODUCT.place
AND PRODUCT.AREA=place
ORDER BY ABS(AMOUNT-marginError)
LIMIT lim;
END

期望的目标是从存储过程中检索最接近的 3 个产品(使用 MySQL),但我在尝试创建过程时不断收到语法错误。

【问题讨论】:

    标签: mysql database stored-procedures call


    【解决方案1】:

    由于您没有发布确切的错误/消息,

    编辑:我假设你是 缺少 2. 和 3. 参数的 IN/OUT。 - 不正确,请参阅 cmets。

    例如

    DELIMITER$$
    CREATE PROCEDURE getThings(IN amount X, IN place VARCHAR(30), IN lim INT)
       SELECT place, `limit`, amount
       FROM AREA, PRODUCT
       WHERE AREA.place=PRODUCT.place
       AND PRODUCT.AREA=place
       ORDER BY ABS(AMOUNT-5)
       LIMIT lim;
    END$$
    DELIMITER;
    

    【讨论】:

    • IN/OUT/INOUT 说明符是可选的。默认参数为IN
    【解决方案2】:

    LIMIT 是 MySQL 的保留字。如果您确实需要将其用作列名,请输入反引号(``)。此外,您的参数与表中的列具有相同的名称,这会增加混乱。

    【讨论】:

    • 抱歉,在提出问题时打错字了(已更正)
    • 不,从来没有。我有 lim 在那里
    • SELECT place, limit, amount limit?
    • 我担心你的问题的第一个版本中有 LIMIT,因为我复制了你的代码作为我的答案的第一个版本......
    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2011-06-29
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多