MySQL параметр хранимой процедуры не работает - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в 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 ;

1 Ответ

0 голосов
/ 05 февраля 2019

Из руководства :

Пользовательские переменные предназначены для предоставления значений данных.Их нельзя использовать непосредственно в операторе SQL в качестве идентификатора или как часть идентификатора, например, в контексте, где ожидается имя таблицы или базы данных

Чтобы использовать переменную в качестве имени таблицы, вынужно подготовить заявление и выполнить его:

SET @sql = CONCAT('DROP TABLE IF EXISTS ', mytablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;
...