MySQL存储过程返回选择

时间:2012-01-10 16:23:25

标签: mysql stored-procedures

这是一个非常基本的MySQL问题,但我找不到答案。假设以下存储过程体;

DECLARE Existing INT DEFAULT 0;
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1;
SELECT FOUND_ROWS() INTO Existing;
Select Existing;

当我运行它时,它总是返回第一个SELECT结果。但是我希望它返回最后一个(SELECT Existing)结果。这种行为是否正常?如果是这样,我怎么能改变它,因为第一个选择仅用于检查,最后一个是我需要的。

(真正的逻辑与此不同,我在这里简化了它)

4 个答案:

答案 0 :(得分:3)

你可以这样做:

SELECT COALESCE(id/id, 0) AS Existing
    FROM users 
    WHERE id = pid 
    LIMIT 1;

如果找到id,您将返回1(id / id = 1)。如果未找到id,则返回0(id / id为IS NULL,COALESCE将返回0)。

答案 1 :(得分:1)

问题是您用来运行存储过程的MySQL“客户端”。存储过程将返回所有查询的结果集,但客户端应支持它。您是在phpMyAdmin或其他类似客户端运行查询吗?尝试使用默认客户端调用存储过程 - 命令提示符,您将看到它返回所有查询的结果。请阅读最后一段on this page

现在这是一些指针。现在来看看如何从过程中返回值。您可以使用OUT参数执行此操作,该参数用于将过程中的值传递回调用方。请在this page on the MySQL website上阅读更多内容 - 该页面上的示例说明了这一点。

希望这有帮助!

答案 2 :(得分:0)

您可以创建表变量,填充它,然后从中进行选择

CREATE PROCEDURE my_proc () BEGIN 

CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); 
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1; 

SELECT * FROM TEMPORARY;

答案 3 :(得分:0)

仅用于调试,如果两个select sql返回列数相等,则可以使用union:

选择1,'100'联合选择'3434',2;