2011-11-23 68 views
4

我想写一个选择内部MySQL的功能,但总是得到一个NULL返回MySQL的选择功能

CREATE FUNCTION test (i CHAR) 
RETURNS CHAR 
NOT DETERMINISTIC 
BEGIN 
DECLARE select_var CHAR; 
SET select_var = (SELECT name FROM table WHERE id = i); 
RETURN select_var; 
END$$ 

mysql> SELECT test('1')$$ 
+-----------------+ 
| test('1') | 
+-----------------+ 
| NULL   | 
+-----------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> 
mysql> 
mysql> SHOW WARNINGS 
    -> $$ 
+---------+------+----------------------------------------+ 
| Level | Code | Message        | 
+---------+------+----------------------------------------+ 
| Warning | 1265 | Data truncated for column 'i' at row 1 | 
+---------+------+----------------------------------------+ 
1 row in set (0.00 sec) 
+0

这可能是显而易见的,但是在id = 1的表中有一行吗? – Zohaib

+0

当我自己运行select时,它返回一个结果。 – jdborg

+0

为什么我是char而不是INT? –

回答

3

尝试指定char返回类型的大小。例如,如果名称可以是20个字符,然后尝试

RETURNS CHAR(20) 
+0

谢谢!认为只需设置CHAR就会自动完成。 – jdborg

7

它的工作原理与此:

CREATE FUNCTION test (i CHAR) 
RETURNS VARCHAR(SIZE) 
NOT DETERMINISTIC 
BEGIN 
    DECLARE select_var VARCHAR(SIZE); 
    SET select_var = (SELECT name FROM table WHERE id = i); 
    RETURN select_var; 
END$$ 
0

您有一个名为表的表?逃脱的名字,如果这是真的它是什么:

(SELECT name FROM `table` WHERE id = i); 

或把表名....它似乎缺少

1

你有一个错误在你的代码,如果你只需要一结果,您可以从简单的选择中获得它,如下所示,单词INTO请记住,它返回最后一个。

CREATE FUNCTION test (i CHAR) 
RETURNS VARCHAR(SIZE) 
NOT DETERMINISTIC 
BEGIN 
    DECLARE select_var VARCHAR(SIZE); 
    SELECT name INTO select_var FROM table WHERE id = i; 
    RETURN select_var; 
END$$