Я столкнулся с этой проблемой в 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
Может кто-нибудь, пожалуйста, указать причину и решение для этого?
Спасибо заранее ...
Вы пытаетесь выполнить сразу два запроса. –
Вы хотите сказать, что я возьму один оператор PREPARE для каждого запроса? –
@YashwanthAluru Не совсем понятно, почему вы делаете это как подготовленное заявление, так как в этом нет ничего динамичного? –