вызов хранимой процедуры mysql не может получить доступ к значению параметра - PullRequest
1 голос
/ 22 июня 2011

У меня есть хранимая процедура с именем create_new_db (p VARCHAR (45)) в mysqldb. Синтаксис следующий.

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `create_new_db`( p VARCHAR(45))

BEGIN

CREATE SCHEMA IF NOT EXISTS p DEFAULT CHARACTER SET latin1 ;

-- -----------------------------------------------------
-- Table `p`.`events`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS p.events ( yada, yada, ...)

Когда я вызываю хранимую процедуру, используя

Call mysqldb.create_new_db('new_db_name');

Процедура выполняется, база данных и таблицы создаются, но параметр, который я передаю, НЕ доступен. Созданная база данных называется p, а не параметром name, который я передаю процедуре

Я попытался назначить параметр глобальной переменной в скрипте

@P = p;

Затем я вижу, что имя параметра, которое я передаю в процедуру, попадает в хранимую процедуру, но почему это не работает ??

Я, вероятно, здесь упускаю что-то очевидное, но ... была бы признательна за помощь.

1 Ответ

1 голос
/ 22 июня 2011

Вы не можете создать такой динамический sql. Вы должны использовать EXECUTE IMMEDIATE 'some dynamic sql stmt'

Вы передаете ей строку, поэтому создайте свой sql в своем хранимом процессе, например:

EXECUTE IMMEDIATE concat('CREATE SCHEMA IF NOT EXISTS ', p, ' DEFAULT CHARACTER SET latin1');

и аналогичные для других CREATE заявлений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...