【发布时间】:2009-05-27 17:44:03
【问题描述】:
说明: 实际运行的查询返回了 4 个结果,如下所示, 我所做的只是连接项目然后返回, 但出乎意料的是,它是空的。
我认为代码是不言自明的:
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)
对于那些认为代码不言自明的人:
为什么函数返回NULL?
【问题讨论】:
-
你应该写一个正确的问题的描述。
-
是的,我真的不认为代码是不言自明的。即使人们最终能弄明白,当你有这么多代码时,用文字实际解释会更有帮助。
-
你们完全正确,我已经纠正了我的错误。
-
答案是:简化问题。不是为了我们,而是为了你自己。在复杂的情况下工作,您将花费数天而不是数小时试图找出问题所在。仅使用相关位制作同一事物的简单版本并测试您的假设。这是找出问题所在的唯一方法。
-
看来我找到了案例,请参阅我更新的帖子。
标签: sql mysql stored-functions