본문 바로가기
SQL/Oracle

[Oracle] 오라클 시간더하기, 테스트용 데이터 만들기

by Pendine 2021. 11. 12.
728x90
-- 5분간격 이력데이터 생성
declare
시간값 date := to_date('20211210144500' , 'yyyymmddhh24miss'); 
-- 데이터 생성 시작 시점 의 -5분으로 설정해야
-- 아래의 +5분하는 부분으로 인해 시간이 겹치지 않음
-- declare 와 begin 사이의 공백이 발생한다면 sql 쿼리의 마지막을 만났다고 오류로그를 출력함.
begin
    for day in 1..22 loop   -- <-- 루프문
        for hour in 0..23 loop
            for min in 1 .. 12 loop  --> 각 시간의 매 5분마다 데이터 생성 -> 60을 5로 나누면 12
            시간값 := 시간값 + interval '5' minute; --> 5분씩 더하기
                for i in 1 .. 63 loop --> 매 5분마다 1부터 63개까지의 지점 생성
                    -- 키값이 없어 생성할 수 없는 데이터 건너뛰기
                    IF (i=55) THEN CONTINUE;
                    END IF; 
                insert into 테이블명 
                values 
                (
                    LPAD( i , 5 , '0')  --> 생성 방식 맞추기 5자리수에 맞게끔 포맷시키기, 왼쪽을 0으로 채움
                    , to_char( 시간값 , 'yyyymmddhh24miss')
                    , dbms_random.value(1,200)  --> 데이터 랜덤 생성을 위해사용 범위 최소 : 1 ~ 최대 : 200
                    , dbms_random.value(20,60)
                    , dbms_random.value(10,100)
                );
                end loop;
                commit;
            end loop;
        end loop;
    end loop;
end;

commit;

테스트를 위해 이력 테이블에 테스트용 데이터 생성하는 쿼리다.

 

LPAD ( 데이터값, 숫자, 문자 )

-> 위의 LPAD( i , 5 , '0') 를 예를들면

i 가 1부터 63까지 반복한다.

따라서 loop문을 순회하면 문자열데이터 '00001' ~ '00063' 까지의 데이터가 생성된다.

 

dbms_random.value( 숫자 , 숫자 ) 

-> 위의 dbms_random.value(1,200)  를 예를 들면

1부터 200까지의 숫자로 랜덤으로 숫자형 데이터가 생성된다.

 

declare

-> 변수 선언.

위의 시간값 date := to_date('20211210144500' , 'yyyymmddhh24miss'); 

로 설명하면

변수명 데이터형식 := 데이터 형식에 맞는 데이터 삽입.

sql 에서의 변수에 대한 데이터 삽입 연산은 = 가 아닌 := 로 초기화한다.

 

interval '5' minute

-> date 형식의 시간 더하기를 위한 연산자

위의 시간값 := 시간값 + interval '5' minute;

으로 설명하면

현재 date형 변수에 대해 5 분을 더한다.

interval '문자' 시간종류

에서 '문자' 는 고정된 문자가 들어가야하는 것 같고

시간종류는 second, minute, hour, day, month 로 설정할 수 있다.

 

https://www.alibabacloud.com/help/doc-detail/215071.htm 에서는

연산이 가능한 것 처럼 나오는데 뭔가 오류가 계속 나와서 해봐도 안된다.

일단 처음 생각했던 loop로 계속 더하게 하는것을 통해 원하던 데이터들은 생성이 됐다.

 

다만 데이터 생성시 한달단위의 데이터 생성하는것이

생각보다 너무 오래걸려 매 5분마다 모든 키값의 데이터들을 생성하고

 

중간중간 끊어서 확인해보니 정상적으로 작동하는것을 확인했다.

 

1달단위의 데이터 커밋시 10분 이상 걸릴 수 있다.

728x90

댓글