MySQL динамический запрос с объявлением - PullRequest
0 голосов
/ 06 декабря 2011

Я хотел бы спросить, возможно ли 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

Спасибо

1 Ответ

1 голос
/ 06 декабря 2011
  • Первый - DECLARE разрешен только внутри составного оператора BEGIN ... END.
  • Второй - не все утверждения можно использовать в операторе PREPARE, подробнее здесь - Подготовленные операторы .

Но вы можете использовать что-то вроде этого -

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 |
+-----------+
...