【发布时间】:2013-02-02 05:18:00
【问题描述】:
这是一个名为 code 的表。
p_code 列是父母的代码
并且存储过程应该像这样返回一组由p_code组合的记录;
程序除了第一次运行良好(重新连接MYSQL后,它返回null!)。它有什么问题?
这是存储过程。
BEGIN
DECLARE _CODE bigint(20);
DECLARE _P_CODE bigint(20);
DECLARE _SORT bigint(20);
DECLARE _pre_P_CODE bigint(20);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @CODE = NULL;
SET _P_CODE = @CODE;
SET _CODE = '';
SET _SORT = 0;
SET _pre_P_CODE = '';
IF @CODE IS NULL THEN
RETURN NULL;
END IF;
LOOP
SELECT CODE, P_CODE, SORT, CODE_NAME, CODE_LEVEL
INTO @CODE, @P_CODE, @SORT, @CODE_NAME, @CODE_LEVEL
FROM CODE
WHERE LANGUAGE = @LANGUAGE
AND P_CODE = _P_CODE
AND SORT > _SORT
ORDER BY SORT limit 1;
IF @CODE IS NOT NULL OR _P_CODE = @start_with THEN
SET @level = @level + 1;
RETURN @CODE;
END IF;
SET @level := @level - 1;
SELECT CODE, P_CODE, SORT
INTO _CODE, _P_CODE, _SORT
FROM CODE
WHERE CODE = _P_CODE;
END LOOP;
END
并且程序是这样调用的。此 SQL 将返回上面的第二张图片。
SELECT
menu_connect_by_p_code() AS CODE,
@level as level,
@P_CODE as p_code,
@SORT as sort,
@CODE_NAME as CODE_NAME,
@CODE_LEVEL as CODE_LEVEL
FROM (
SELECT
@start_with := 6001,@LANGUAGE := 'en' ,
@CODE := @start_with,
@level := 0
) vars, code
WHERE @CODE IS NOT NULL
我不明白为什么它第一次返回 null。 MYSQL的程序或某种错误有问题吗?
------------------- 编辑 --------------- ---------------------
RolandoMySQLDBA,rsanchez,我尝试了您的选择,但保持不变。它返回多行,有些列是空的。
------------------- 编辑2 --------------- ---------------------
你可以在这里看到:http://sqlfiddle.com/#!2/aa033/1
【问题讨论】:
-
你能在这里编辑这个 sqlfiddle:sqlfiddle.com/#!2/a672b 这样我们就可以试试了。根据您拥有的内容更正架构,我们可以看到它运行
-
您可以在这里查看:sqlfiddle.com/#!2/aa033/1。当我重新连接到 mysql 时,问题就开始了。而且似乎在 sqlfiddle 中没有像重新连接这样的选项。
-
sqlfiddle 似乎在几分钟后重新连接。