2015-02-16 2 views
-3

Я столкнулся с этой проблемой в MySQL с давних пор. Я динамический запрос, как показано ниже в моей хранимой процедуре,Ошибка синтаксиса в динамическом запросе MySQL

delimiter // 

CREATE PROCEDURE test_proc() 
BEGIN 

DECLARE var INT DEFAULT 1; 
DECLARE id VARCHAR(500) DEFAULT '0'; 

WHILE var <= 10 
DO 

SET id = CONCAT(id ,',',(SELECT CAST(id AS CHAR) FROM test_client WHERE Rank = var)); 
SET var = var + 1; 

END WHILE; 

SET SQL_QUERY = CONCAT(' 
     CREATE TEMPORARY TABLE t1 
     AS 
     SELECT * 
     FROM test WHERE id IN (',id,');'); 

SET SQL_QUERY1 = CONCAT('  
     CREATE TEMPORARY TABLE t2 
     AS 
     SELECT * 
     FROM test1 WHERE id IN (',id,')'); 

SET @SWV_Stmt = CONCAT(SQL_QUERY,SQL_QUERY1); 
PREPARE SWT_Stmt FROM @SWV_Stmt; 
EXECUTE SWT_Stmt; 
DEALLOCATE PREPARE SWT_Stmt; 

END // 

delimiter ; 

Когда я создаю и выполнить это, я получаю ниже ошибки,

Error Code: 1064. 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 'CREATE TEMPORARY TABLE t2 AS SELECT *' at line 5 

Может кто-нибудь, пожалуйста, указать причину и решение для этого?

Спасибо заранее ...

+1

Вы пытаетесь выполнить сразу два запроса. –

+0

Вы хотите сказать, что я возьму один оператор PREPARE для каждого запроса? –

+1

@YashwanthAluru Не совсем понятно, почему вы делаете это как подготовленное заявление, так как в этом нет ничего динамичного? –

ответ

2

Это не один оператор, то есть два. documentation states:

Текст должен представлять собой один оператор, а не несколько операторов.

+0

Я стучал головой о стену на этом в течение часа! огромное спасибо – Michael

Смежные вопросы