оракул рекурсивный с формулой количественного значения - PullRequest
0 голосов
/ 04 июля 2018

Мне нужна помощь, чтобы сделать рекурсивный запрос.

    --select * from tmpProduto;
    create table tmpProduto(
      idpro    number,
      descpro  varchar2(100),
      unimetr  varchar2(3),
      qtty     number(10,4))

    alter table tmpProduto add constraint pk_TmpProduct primary key (idpro);

    --select * from tmpComposition;
    create table tmpComposition(
      idmodel  number,
      idcomp   number,
      qtty     number(10,4));

    alter table tmpComposition add constraint pk_TmpCompositon primary key (idmodel, idcomp);

У меня есть две таблицы и сделать рекурсивный запрос

    SELECT p.idpro, c.idmodel, c.idcomp, c.qtty, LEVEL lnum                                      
      FROM tmpComposition c 
      INNER JOIN tmpProduto p 
      ON (p.idpro = c.idmodel)
      CONNECT BY PRIOR c.idcomp = c.idmodel
      START WITH M.CODMOD = :vcdProduto;

Я хочу это сделать, вычислить поле qtty с помощью
product.qtty * component.qtty - здесь мне нужно применить рекурсив там, где уровень 1
component.qtty * component.qtty - здесь, где уровень больше 1

образец:
товар

idprod | descprod     | qtty  
0001   | 'Test Prod1' | 1  
0002   | 'Test Prod2' | 1  

компонент

idmodel | idcomp |  qtty    
0001    |  0002  |  0,5  
0001    |  0003  |  0,43  
0001    |  0075  |  1,15  
0002    |  0005  |  0,24  
0005    |  0006  |  0,25  
0005    |  0007  |  0,78  

результат мне нужен

idmodel |  idcomp  |  p.qtty  | c.qtty  | value_I_want
0001    |  0002    |    1     | 0,5     | 0,5  
0002    |  0005    |          | 0,24    | 0,12  
0005    |  0006    |          | 0,25    | 0,03  
0005    |  0007    |          | 0,78    | 0,0936  
0001    |  0003    |    1     | 0,43    | 0,43  
0001    |  0075    |    1     | 1,15    | 1,15  

1 Ответ

0 голосов
/ 04 июля 2018
select level
         , q.*
         , connect_by_root q.prod_qty * q.comp_qty
         , connect_by_root q.comp_qty * q.comp_qty
(select distinct p.idpro,
        p.descpro,
                p.unimetr,
                p.qtty prod_qty,
                c.idmodel,
                c.idcomp,
                c.qtty comp_qty
     from tmpProduto p
            , tmpComposition c
  where p.idpro = c.idmodel
    ) q
    connect by prior q.idcomp = q.idmodel
    start with p.idpro = :p_prod_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...