Ou seja, em resumo vc quer "inventar dados", ie, vc quer 'criar' dados (um 
conjunto de linhas no caso) que não estão na tabela.... ok, pra vc fazer isso 
as duas técnicas principais são usar a ALL_OBJECTS ou usar o connect by , veja 
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:14582643282111
 ....
 Um exemplo AINDA INCOMPLETO mas bem adiantado nesse caminho seria este abaixo, 
no caso usando a técnica do infinite dual/connect by :
 
SQL> create table T (Codigo varchar2(4),Nome varchar2(40) ,DataInicio 
date,DataFim date);

Tabela criada.

SQL> insert into T values('0001', 'Nome Teste 0001', '01/05/2017', 
'10/05/2017');

1 linha criada.

SQL> insert into T values('0002', 'Nome Teste 0002', '10/06/2017', 
'15/06/2017');

1 linha criada.

SQL> with nums
  2   as
  3   (select level R
  4      from dual
  5   connect by level <= 60
  6   )
  7   select t.codigo, (t.DataInicio+r) -1  dt,
  8          t.DataFim
  9     from t, nums
 10    where (nums.r - 1) + t.DataInicio between t.DataInicio and t.DataFim
 11    order by 1,2;

CODI DT       DATAFIM
---- -------- --------
0001 01/05/17 10/05/17
0001 02/05/17 10/05/17
0001 03/05/17 10/05/17
0001 04/05/17 10/05/17
0001 05/05/17 10/05/17
0001 06/05/17 10/05/17
0001 07/05/17 10/05/17
0001 08/05/17 10/05/17
0001 09/05/17 10/05/17
0001 10/05/17 10/05/17
0002 10/06/17 15/06/17
0002 11/06/17 15/06/17
0002 12/06/17 15/06/17
0002 13/06/17 15/06/17
0002 14/06/17 15/06/17
0002 15/06/17 15/06/17

16 linhas selecionadas.

SQL>
===> Isso *** nem de longe *** está com qualidade pronta pra Produção (entre 
outras coisas eu ** não ** estou Validando a porção hora da coluna date, assumo 
aqui que é sempre zero) mas é uma boa demonstração da técnica, que em si é bem 
simples:  basicamente tenho um resultset gerando números de 1 a 60 (já que 
avalio que não haverá mais de 60 dias de gap entre a data início e a fim) e 
faço um join desse resultset com a tabela real, filtrando para só trazer as 
linhas onde o valor do número somado com o valor do número sequencial gerado 
está entre o início e o fim ... A minha lógica aqui confia no fato que (cfrme 
vc deve saber), no RDBMS Oracle somando números em item DATE vc avança o número 
de dias que somou na data....

Abraços,

  Chiappa

Responder a