2017-02-20 3 views
-1
 
ID Date  NAME START_TIME    END_TIME    
1 2/15/2017 A  2/15/20173:40:39 PM  2/15/2017 3:41:17 PM 
2 2/15/2017 B  2/15/20173:40:39 PM  2/15/2017 3:41:17 PM 
3 2/15/2017 C  2/15/20173:40:39 PM  2/15/2017 3:41:17 PM  

У меня возникла проблема, когда мне нужно заполнить мою базу данных этими 3 заявлениями с января 2016 года по сегодняшний день. Одним из решений, которые я могу попробовать, я могу написать код Java, который просто зацикливается и создает новую дату и новую запись для таблицы, а затем я могу вставить сгенерированный запрос.Заполните данные для заполнения в таблице с помощью Oracle

Но есть ли способ, которым я могу это сделать, используя оракул.

+2

Вы используете MySQL или Oracle? (Не помещайте те продукты, которые не задействованы.) – jarlh

+0

Одна строка в день для каждого из A, B и C? С каких начальных и конечных времен? –

+0

@jarlh i m используя оракул. – rkSinghania

ответ

0

Как базовая концепция, что-то подобное сделало бы это ... Вам нужно либо адаптироваться для A, B и C, либо повторить для каждого.

with Numbers (NN) as 
(
select 1 as NN 
from dual 
union all 
select NN+1 
from Numbers 
where NN <2000 
) 
insert into MyTable (ID, Date, Name, StartTime, EndTime) 
select NN + 3, -- If repeating, replace the 3 with the max(id) after each run 
     'A', 
     to_date('20170215','YYYYMMDD') - NN, 
     to_date('20170215 154039','YYYYMMDD HH24MISS') - NN, 
     to_date('20170215 154117','YYYYMMDD HH24MISS') - NN 
from NN 
where NN <= 365 
+0

Исключение для исключения PLS-00182: Идентификатор не может быть пустой строкой – rkSinghania

1

Это обычно используется способ создания даты, данные начала и дату окончания, которые вы можете просто присоединиться к списку ваших имен, чтобы получить то, что вам нужно:

insert into yourTable (...)  
with names as (
    select 'A' as name from dual union all 
    select 'B' as name from dual union all 
    select 'C' as name from dual 
), 
dates as (
      select date' 2017-01-01' + level -1 as yourDate 
      from dual 
      connect by date' 2016-01-01' + level -1 <= date '2017-02-20' 
     ) 
select rownum, name, yourDate 
from names 
     cross join dates 

Это чтобы быть немного отредактированы, чтобы лучше соответствовать количеству и типам ваших столбцов. Небольшой пример того, как это работает:

with names as (
    select 'A' as name from dual union all 
    select 'B' as name from dual union all 
    select 'C' as name from dual 
), 
dates as (
      select date' 2017-02-18' + level -1 as yourDate, 
      level as lev 
      from dual 
      connect by date' 2017-02-18' + level -1 <= date '2017-02-20') 
select rownum, name, yourDate, lev 
from names 
     cross join dates 

дает:

ROWNUM N YOURDATE   LEV 
---------- - --------- ---------- 
     1 A 18-FEB-17   1 
     2 B 18-FEB-17   1 
     3 C 18-FEB-17   1 
     4 A 19-FEB-17   2 
     5 B 19-FEB-17   2 
     6 C 19-FEB-17   2 
     7 A 20-FEB-17   3 
     8 B 20-FEB-17   3 
     9 C 20-FEB-17   3