【问题标题】:MySQL Dynamic query with declares带有声明的 MySQL 动态查询
【发布时间】:2011-12-06 11:02:34
【问题描述】:

我想问一下是否可以在动态查询中使用DECLARE 变量。

即:

CREATE PROCEDURE `storedProcedureName`()
    DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

    SET @i = 0;

    PREPARE dynamicQuery FROM 'DECLARE x INT(11);';
    EXECUTE dynamicQuery;

    PREPARE dynamicQuery FROM 'SET x := ?;';
    EXECUTE dynamicQuery USING @i;

    DEALLOCATE PREPARE dynamicQuery;

    /* More Queries Here */

END

但我收到语法错误:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE x INT(11)' at line 1

谢谢

【问题讨论】:

    标签: mysql variables declare


    【解决方案1】:
    • 首先 - DECLARE 只允许在 BEGIN ... END 复合语句中。
    • 第二 - 不是所有的状态都可以在 PREPARE 语句中使用,更多细节在这里 - Prepared Statements

    但是你可以使用这样的东西 -

    SET @text = 'something';
    SET @var = NULL;
    SET @query = 'SELECT ? INTO @var';
    PREPARE s FROM @query;
    EXECUTE s USING @text;
    DEALLOCATE PREPARE s;
    
    SELECT @var;
    +-----------+
    | @var      |
    +-----------+
    | something |
    +-----------+
    

    【讨论】:

    • 嗨@Devart,我的PREPARE 语句实际上在stored procedure 中。编辑了我的问题。谢谢:D
    • 反正DECLARE语句不能用在prepared statements中。尝试使用用户变量(@var1、@var2、...)。
    • 我明白了,尚不支持其他语句。非常感谢。我想我别无选择,只能使用session variables
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多