我使用一个函数,并希望接收这样的字符串:如您所见,它可能是‘n次’嵌套的。
<project id="123">
<project id="12345" parentid="123"></project>
<project id="12333" parentid="123>
<project id="123345" parentid="12333"></project>
</project>
</project>
<project id="1234">
...
</project>到目前为止,PLSQL:
FOR i IN (
SELECT prj.ID AS PROJECT_ID, prj.PARENT_ID as PARENT_ID
FROM PRJ_PROJECT prj
WHERE PARENT_ID IS NULL
)
LOOP
sendXML := sendXML || '<project id="' || i.PROJECT_ID || '"' || ' parentid="' || i.PARENT_ID || '">' || '</project>';
END LOOP;这将返回第一个“级别”。但是在这个循环中,我希望有另一个循环,对于数据库中的每个条目,这样我就可以接收上面的xml-字符串。
该数据库看起来如下:
| ID | PARENT_ID
----------------------
| 123 | NULL
| 12345 | 123
| 12333 | 123
| 123345 | 12333
| 1234 | NULL 在表中没有更多的数据并继续下一个级别之前,我如何循环它?
谢谢你帮马特
发布于 2013-09-04 11:18:39
使用connect by使用分层查询
SELECT prj.ID AS PROJECT_ID,
prj.PARENT_ID as PARENT_ID
FROM PRJ_PROJECT prj
connect by prior prj.id = prj.parent_id
start with prj.PARENT_ID IS NULL;为了确保根节点先出现,然后是子节点,您可以像这样扩展语句:
SELECT prj.ID AS PROJECT_ID,
prj.PARENT_ID as PARENT_ID,
connect_by_root id as root_project_id
FROM PRJ_PROJECT prj
connect by prior prj.id = prj.parent_id
start with prj.PARENT_ID IS NULL
order by connect_by_root id, level;下面是一个SQLFiddle:http://sqlfiddle.com/#!4/606a7/1
https://stackoverflow.com/questions/18611945
复制相似问题