Как использовать переменную в инструкции создания базы данных
У меня есть эта процедура:
DELIMITER //
create DEFINER = 'root'@'localhost' procedure create_db(name TEXT)
BEGIN
DECLARE temp TEXT;
DECLARE user TEXT;
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = name INTO temp;
if temp = name then
SIGNAL SQLSTATE '45002' SET MESSAGE_TEXT = 'This database already exist';
else
SELECT USER() INTO user;
create database name;
grant all privileges on name.* to user with grant option;
END IF;
END //
DELIMITER ;
он отлично работает, просто поставляет буквально "имя" вместо значения имени переменной. Как мне сказать, что имя является переменной? что-то вроде $name в php или что. Я просматриваю много документов, но все они используют переменные без префиксов.
1 ответ
Решение
Вам просто нужно использовать подготовленные операторы, вот рабочий код:
DELIMITER //
drop procedure if exists create_db //
create procedure create_db(name TEXT)
BEGIN
DECLARE temp TEXT;
DECLARE user TEXT;
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = name INTO temp;
if temp = name then
SIGNAL SQLSTATE '45002' SET MESSAGE_TEXT = 'This database already exist';
else
SELECT USER() INTO user;
SET @s = CONCAT('CREATE DATABASE ', name);
PREPARE stmt_create FROM @s;
EXECUTE stmt_create;
DEALLOCATE PREPARE stmt_create;
SET @s = CONCAT('GRANT ALL PRIVILEGES ON ', name, '.* TO ', user, ' WITH GRANT OPTION');
PREPARE stmt_grant FROM @s;
EXECUTE stmt_grant;
DEALLOCATE PREPARE stmt_grant;
END IF;
END //
DELIMITER ;