考虑一个返回表的存储过程:
DELIMITER //
CREATE PROCEDURE GetLegalAnimals (IN prop VARCHAR(128))
BEGIN
-- Lots of fiddling with temporary tables here
SELECT
animal, hit_points, terrain, weight, height, girth, attack, defence, quest
FROM
temp_animals;
END //
DELIMITER ;
我现在想要过滤返回表的结果:
SELECT animal, terrain FROM GetLegalAnimals('rodent') WHERE hit_points<42;
上述查询无法运行,因为它不是有效的MySQL语法。有没有办法执行这样的查询?我不想为每个(无限)条件实现单独的GetLegalAnimals_*
过程,并且我不希望向过程添加其他参数,因为存在无限的SELECT和WHERE子句排列。
请注意,存储过程使用了一个参数,因此尽管有一些creative solutions的SO社区,但视图并不是一个合适的解决方案。
答案 0 :(得分:0)
如果您想使用整个表格,则需要VIEW
。首先创建视图
USE `yourdatabase`;
CREATE OR REPLACE VIEW `GetLegalAnimals` AS
-- Lots of fiddling with temporary tables here
SELECT
animal, hit_points, terrain, weight, height, girth, attack, defence, quest
FROM
temp_animals;
;
然后你可以查询
SELECT animal, terrain FROM GetLegalAnimals WHERE hit_points < 42;
答案 1 :(得分:0)
使用view
代替存储过程
CREATE VIEW view_name AS
-- Lots of fiddling with temporary tables here
SELECT
animal, hit_points, terrain, weight, height, girth, attack, defence, quest
FROM
temp_animals;