-- 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분 이상 걸릴 수 있다.
'SQL > Oracle' 카테고리의 다른 글
[Database/Oracle]오라클 테이블 스페이스 추가하기 (0) | 2022.03.04 |
---|---|
통계 데이터 생성 오류 잦은 이유 (0) | 2021.12.29 |
만능인줄 알았던 오라클(잘되던 insert select 안될때) (0) | 2021.08.03 |
[Oracle/Tibero] merge insert 누락된 우괄호 (0) | 2021.06.02 |
오라클 상위 몇개 가져오기 (0) | 2021.05.18 |
댓글