Альтернатива динамических представлений в mySQL - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь создать представление в MySQL, которое создается или обновляется, когда пользователь вводит определенное значение (woeid). Я пытался сделать это с помощью хранимой процедуры ниже:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `sp_getChildren`(
    IN woeid INTEGER(15)
)
BEGIN
    CREATE  OR REPLACE VIEW `test`.`children` 
    AS
    SELECT * 
    FROM geoplanet_places gp
    WHERE gp.parent_id = woeid;
END

Вышесказанное или, как я прочитал, невозможно в текущей версии mySQL, поскольку представление в хранимой подпрограмме не может ссылаться на параметры подпрограммы или локальные переменные. Мой вопрос будет в том, какова причина этого и есть ли эффективные альтернативы. Я действительно не хочу создавать новую таблицу и иметь процедуру обновления указанной таблицы.

Любая помощь будет высоко ценится, спасибо.

1 Ответ

2 голосов
/ 24 февраля 2012

Попробуйте использовать подготовленные заявления -

CREATE PROCEDURE sp_getChildren(IN woeid INTEGER(15))
BEGIN
  SET @sql = CONCAT('CREATE  OR REPLACE VIEW `test`.`children` AS SELECT * FROM geoplanet_places gp WHERE gp.parent_id = ', woeid);
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END
...