2011-11-23 54 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$$