Я новичок в MySQL, и я пытаюсь портировать некоторые хранимые процедуры из SQL Server. Я создал базовую хранимую процедуру с передачей параметров в MySQL.
Хранимая процедура просто принимает параметр и выполняет "отбрасывание, если существует" на основе предоставленного параметра.
При запуске в MySQL выдает ошибку ниже.
Кажется, что каким-то образом параметр, переданный 'mytablename' в хранимую процедуру, выполняется как часть оператора вместо параметра.
Любой совет?
Оператор SQL:
call mydb.spDroptableifexist('customerdata');
Результаты:
0 row(s) affected, 1 warning(s): 1051 Unknown table 'mydb.mytablename'
Это хранимая процедура:
USE 'mydb';
DROP procedure IF EXISTS 'spDroptableifexist';
DELIMITER $$
USE 'mydb'$$
CREATE DEFINER='root'@'localhost' PROCEDURE 'spDroptableifexist'(IN mytablename VARCHAR(255))
BEGIN
drop table if exists mytablename;
END$$
DELIMITER ;
Из руководства:
Пользовательские переменные предназначены для предоставления значений данных. Их нельзя использовать непосредственно в операторе SQL в качестве идентификатора или как часть идентификатора, например, в контексте, где ожидается имя таблицы или базы данных
Чтобы использовать переменную в качестве имени таблицы, вам нужно подготовить оператор и выполнить его:
SET @sql = CONCAT('DROP TABLE IF EXISTS ', mytablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;