SQL语句,重复自己,直到没有更多的结果

  • 本文关键字:结果 语句 自己 SQL sql oracle
  • 更新时间 :
  • 英文 :


我有下面的现有语句。它查找存在于其他构建中的部件。问题是,我的用户想继续查询,直到没有更多的结果。

例如。

我们查找PartA在哪里使用。

我们发现它在PartB和PartC内部使用。

然后我们想再次运行查询来查找PartB和PartC的使用位置。

如果PartB没有在其他地方使用(没有找到结果),我们希望返回PartB作为结果的一部分。

但是如果PartC在其他地方使用,我们希望继续进行,直到我们没有得到每个部分的结果。

我不确定这是否可能,所以我想我应该在这里问一下。

select ms.contract site,
ms.part_no,
crar1app.INVENTORY_PART_API.GET_DESCRIPTION(ms.contract, ms.part_no) part_desc,
ms.QTY_PER_ASSEMBLY,
ms.PRINT_UNIT uom,
--  ms.ENG_CHG_LEVEL,
crar1app.ENG_PART_REVISION_API.GET_PART_REV(ms.PART_NO, ms.ENG_CHG_LEVEL) rev,
ms.EFF_PHASE_IN_DATE,
ms.EFF_PHASE_OUT_DATE,
ms.BOM_TYPE,
ms.ALTERNATIVE_NO alt
from crar1app.MANUF_STRUCTURE ms
where ms.CONTRACT = nvl('&SITE','10')
and ms.COMPONENT_PART = '&PART_NO'
and  ms.EFF_PHASE_IN_DATE <= to_date(nvl('&EFF_DATE',to_char(SYSDATE,'YYYY-MM-DD')),'YYYY-MM-DD')
and (ms.EFF_PHASE_OUT_DATE > to_date(nvl('&EFF_DATE',to_char(SYSDATE,'YYYY-MM-DD')),'YYYY-MM-DD')
or ms.EFF_PHASE_OUT_DATE is null)
and (ms.ALTERNATIVE_NO = 'ML' 
or (select 1 from dual where  crar1app.MANUF_STRUCT_ALTERNATE_API.GET_OBJSTATE(ms.CONTRACT,ms.PART_NO,ms.ENG_CHG_LEVEL,ms.BOM_TYPE,'ML') in ('Plannable','Buildable')) IS NULL)

我已经尝试了一些东西,但没有接近我所寻找的。

在CONNECT BY查询中有很多选项,可以让你在层次结构中循环,例如

SQL> create table parts as
2  select empno part_num, mgr parent_part
3  from scott.emp;
Table created.
SQL>
SQL> select
2    level,
3    part_num,
4    parent_part,
5    sys_connect_by_path(part_num,'-') path,
6    connect_by_isleaf
7  from parts
8  connect by prior part_num = parent_part
9  start with parent_part is null;
LEVEL   PART_NUM PARENT_PART PATH                           CONNECT_BY_ISLEAF
---------- ---------- ----------- ------------------------------ -----------------
1       7839             -7839                                          0
2       7566        7839 -7839-7566                                     0
3       7788        7566 -7839-7566-7788                                0
4       7876        7788 -7839-7566-7788-7876                           1
3       7902        7566 -7839-7566-7902                                0
4       7369        7902 -7839-7566-7902-7369                           1
2       7698        7839 -7839-7698                                     0
3       7499        7698 -7839-7698-7499                                1
3       7521        7698 -7839-7698-7521                                1
3       7654        7698 -7839-7698-7654                                1
3       7844        7698 -7839-7698-7844                                1
3       7900        7698 -7839-7698-7900                                1
2       7782        7839 -7839-7782                                     0
3       7934        7782 -7839-7782-7934                                1

最新更新