在select中使用存储过程

时间:2014-01-28 10:10:54

标签: mysql sql select stored-procedures

考虑一个返回表的存储过程:

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社区,但视图并不是一个合适的解决方案。

2 个答案:

答案 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;