주어진 노드에 대한 모든 하위 레코드를 반환하도록 설계된 간단한 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과 리눅스 시스템에서 잘 작동하지 않습니다. –
귀하의 절차가 결정적이지 않습니다. 그 (부적절한) 지정자없이 시도하십시오. – pilcrow