我設計了返回所有子記錄給定節點一個簡單的MySQL的存儲過程。 我的問題是,當我手動輸入它會返回正確的結果 - 但是當我將相同的代碼放入存儲過程時,它只返回父ID。MySQL的存儲過程給予不同的結果,以命令行
我會很感激一些指導!
例如 - 當我把我的程序(代碼如下),我得到:
call find_child(1006);
+--------+
| nodeid |
+--------+
| 1006 |
| 1006 |
| 1006 |
| 1006 |
+--------+
4 rows in set (0.01 sec)
但是 - 當我剪切和粘貼獲得正確的結果集的命令:
mysql> create temporary table KID_TABLE (nodeid INT);
Query OK, 0 rows affected (0.00 sec)
mysql> insert ignore into KID_TABLE (nodeid) select nodeid from CORPORATENODE
where parentid in (1006);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from KID_TABLE;
+--------+
| nodeid |
+--------+
| 1007 |
| 1008 |
| 1031 |
| 1038 |
+--------+
4 rows in set (0.00 sec)
這裏的驗證碼:
DELIMITER $$
DROP PROCEDURE IF EXISTS `find_child`$$
CREATE PROCEDURE `find_child`(IN NodeID INT)
DETERMINISTIC
BEGIN
declare nid INT;
set nid= NodeID;
create temporary table KID_TABLE (nodeid INT);
insert ignore into KID_TABLE (nodeid) select nodeid
from CORPORATENODE where parentid in (1006);
select * from KID_TABLE;
drop table KID_TABLE;
END $$
DELIMITER ;
這裏的DDL父表
CREATE TABLE `PARENT` (
`NODEID` int(11) NOT NULL AUTO_INCREMENT,
`PARENTID` int(11) NOT NULL DEFAULT '0' COMMENT '0 value means top node',
`NAME` varchar(50) NOT NULL,
PRIMARY KEY (`NODEID`) USING BTREE
) ENGINE=InnoDB;
只是一個簡單的問題,你在Windows上運行嗎?你的情況看起來很糟糕,並且在缺省配置的mysql的linux系統上不起作用。 –
你的程序不是確定性的。嘗試沒有(不正確)說明符。 – pilcrow