mySQL中的动态视图替代方案

时间:2012-02-24 02:52:50

标签: mysql database dynamic views

我正在尝试在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 个答案:

答案 0 :(得分: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