2011-12-06 75 views
0

我想问一下在动态查询中是否有可能使用DECLARE变量。MySQL声明的动态查询

即:

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
  • 首先 - 声明只在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 | 
+-----------+ 
+0

嗨@Devart,我'PREPARE'声明实际上是一个'存储procedure'内。编辑我的问题。感谢:D – KaeL

+0

无论如何,DECLARE语句不能用于准备好的语句。尝试使用用户变量(@ var1,@ var2,...)。 – Devart

+0

我看到,其他语句尚不支持。非常感谢。我想我别无选择,只能使用'会话变量'。 – KaeL