首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >parentid上的PLSQL循环

parentid上的PLSQL循环
EN

Stack Overflow用户
提问于 2013-09-04 10:57:49
回答 1查看 157关注 0票数 1

我使用一个函数,并希望接收这样的字符串:如您所见,它可能是‘n次’嵌套的。

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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-字符串。

该数据库看起来如下:

代码语言:javascript
复制
| ID     | PARENT_ID 
----------------------
| 123    | NULL 
| 12345  | 123 
| 12333  | 123
| 123345 | 12333 
| 1234   | NULL 

在表中没有更多的数据并继续下一个级别之前,我如何循环它?

谢谢你帮马特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-04 11:18:39

使用connect by使用分层查询

代码语言:javascript
复制
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;

为了确保根节点先出现,然后是子节点,您可以像这样扩展语句:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18611945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档