我正在尝试在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中是不可能的,因为在存储例程中的视图不能引用例程参数或局部变量。我的问题是,原因是什么,以及是否有任何有效的替代方案。我真的不想创建一个新表并让程序更新所述表。
非常感谢任何帮助,谢谢。
答案 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