SELECT ... INTO在存储过程中返回null

时间:2013-02-15 17:44:11

标签: mysql stored-functions

此功能:

CREATE FUNCTION `GetCardID`(numId INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
    DECLARE retcard INT(11);
    SELECT id
    INTO retcard
    FROM cards
    WHERE `number` = numId
        AND enabled = 1
    LIMIT 1;
    RETURN retcard;
END

即使在查询时始终返回null:

SELECT id FROM cards WHERE `number`=<Insert Value Here> AND ENABLED = 1 LIMIT 1;

返回与函数和函数参数中使用的相同值的有效值。

例如:
SELECT id FROM cards WHERE number = 12345 AND ENABLED = 1 LIMIT 1;
- 返回一个id,而
GetCardId(12345);
- 返回null

我在这里缺少什么想法?我认为自己对SQL非常熟练,但在SP上有点绿色。

3 个答案:

答案 0 :(得分:1)

克里斯托弗这是你的职责。试试这个它应该有效:

CREATE FUNCTION [dbo].[GetCardID]
(  
    @Num_ID INT

)  
RETURNS int  
AS  
BEGIN  
    declare @retcard int    

    select Top 1 @retcard = id 
    FROM cards 
    where number = @num_Id
    AND enabled = 1

    return @retcard



END

答案 1 :(得分:1)

您正在使用的功能有多大?这个数字是否可能大于适合INT的数字?

答案 2 :(得分:0)

Always returns NULL

删除过程定义中的DETERMINISTIC子句。 MySQL缓存来自这些过程或函数的响应。

摘自MySQL:

  

如果例程始终产生相同的例程,则该例程被认为是“确定性的”   结果输入参数相同,“不确定”   除此以外。如果既没有给出DETERMINISTIC也没有给出DETERMINISTIC   例程定义,默认为NOT DETERMINISTIC。声明   函数是确定性的,您必须指定DETERMINISTIC   明确地

MySQL 5.5 - Creating Procedure or Function