Я использую оператор подготовки в хранимой процедуре.
DROP PROCEDURE
IF EXISTS test;
delimiter //
CREATE PROCEDURE
test(IN query varchar(100))
begin
SET @query =CONCAT('select * FROM db.',query,' LIMIT 10000;');
select @query;
PREPARE arcive_stmt FROM @query;
EXECUTE arcive_stmt;
commit;
DEALLOCATE PREPARE arcive_stmt;
END //
delimiter ;
Эта процедура получит таблицу и условия из пользовательского ввода и выполнит запрос на выборку.
Итак, я выполнил это:
mysql> call test ('logs where created_date < DATE(Now() - INTERVAL 3 month) and updated_at < DATE(Now() - INTERVAL 3 month');
Но я получил эту ошибку:
ERROR 1064 (42000): 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 'LIMIT 10000' at line 1
Я использовал print @query для отладки этого.Затем оно усекает мою входную строку.
select * FROM db.logs where created_date < DATE(Now() - INTERVAL 3 month) and updated_at < DATE(Now() - INTER LIMIT 10000;
Оно усекает мое жало до DATE(Now() - INTER
.Может ли кто-нибудь помочь мне понять и исправить эту проблему?