2012-02-24 4 views
1

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

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, так как вид, в хранимой процедуре, не может ссылаться на рутинных параметров или локальных переменных. Мой вопрос будет тем, что причина этого, и если есть какие-то эффективные альтернативы. Я действительно не хочу создавать новую таблицу и обновлять эту таблицу.

Любая помощь была бы очень признательна, спасибо.

ответ

2

Попробуйте использовать prepared statements -

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