仅供测试,
但很奇怪:
DELIMITER |
DROP FUNCTION IF EXISTS get_idiscussion_ask|
CREATE FUNCTION get_idiscussion_ask(iask_id INT UNSIGNED) RETURNS TEXT DETERMINISTIC
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE body varchar(600);
DECLARE created DATETIME;
DECLARE anonymous TINYINT(1);
DECLARE screen_name varchar(64);
DECLARE result TEXT;
DECLARE cur1 CURSOR FOR SELECT body,created,anonymous,screen_name from idiscussion left join users on idiscussion.uid=users.id where idiscussion.iask_id=iask_id;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
SET result = '';
OPEN cur1;
REPEAT
FETCH cur1 INTO body, created, anonymous, screen_name;
SET result = CONCAT(result,'<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>');
UNTIL done END REPEAT;
CLOSE cur1;
RETURN result;
END |
DELIMITER ;
mysql> DELIMITER ;
mysql> select get_idiscussion_ask(1);
+------------------------+
| get_idiscussion_ask(1) |
+------------------------+
| NULL |
+------------------------+
1 row in set (0.01 sec)
mysql> SELECT body,created,anonymous,screen_name from idiscussion left join users on idiscussion.uid=users.id where idiscussion.iask_id=1;
+------+---------------------+-----------+-------------+
| body | created | anonymous | screen_name |
+------+---------------------+-----------+-------------+
| haha | 2009-05-27 04:57:51 | 0 | NULL |
| haha | 2009-05-27 04:57:52 | 0 | NULL |
| haha | 2009-05-27 04:57:52 | 0 | NULL |
| haha | 2009-05-27 04:57:53 | 0 | NULL |
+------+---------------------+-----------+-------------+
4 rows in set (0.00 sec)
答案 0 :(得分:1)
你应该做
Select Result
答案 1 :(得分:1)
1)你没有在你的例子中调用你的函数。
2)将任何与null结合的结果都为null
答案 2 :(得分:0)
你...连接一个null和一个字符串......这是一个空值。如果您甚至不打电话,存储过程与它有什么关系呢?
答案 3 :(得分:0)
如果你改变了这个:
DECLARE cur1 CURSOR FOR
SELECT body,created,anonymous,screen_name
FROM idiscussion
LEFT JOIN users ON idiscussion.uid=users.id
WHERE idiscussion.iask_id=iask_id;
到
DECLARE cur1 CURSOR FOR SELECT
ifnull(body,'')
,ifnull(created,now())
,ifnull(anonymous,0)
,ifnull(screen_name,'')
FROM idiscussion
LEFT JOIN users on idiscussion.uid=users.id
WHERE idiscussion.iask_id=iask_id;
你应该对CONCATing nulls
没有任何问题我也想知道这部分是否
where idiscussion.iask_id=iask_id;
没有给出名称冲突也许您应该更改参数
iask_id到
piask_id
(但我不确定那个部分)。