2011-12-06 80 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