2017-02-20 8 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つのステートメントでデータベースを埋める必要がある問題に直面しています。 私が試すことができる1つの解決策は、私はちょうどループし、テーブルの新しい日付と新しいエントリを作成し、私は生成されたクエリを使用して挿入することができますJavaコードを書くことができます。オラクルを使用して表のデータを埋め戻します

しかし、これをoracleを使用して行う方法はありますか。

+2

を使用すると、MySQLやOracleを使用していますか? (含まれていない製品にはタグを付けないでください) – jarlh

+0

A、B、Cのそれぞれについて1日1列ですか?どのような開始時間と終了時間ですか? –

+0

@jarlh私はoracleを使用しています。 – 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 
関連する問題