728x90
반응형

테이블 A에 1,2,3,4,5,6,7  이라는 컬럼이 있습니다.

1,2,3 에는 그냥 고정값 a,b,c,가 각각 들어가고

4에는 해당 날짜 시간

5,6,7에는  5에는 4에서 적힌 년, 6에는 4에서 찍힌 월,7에는 4에서 찍힌  일을 넣을려고 합니다.

 

 

 1  2  3  4  5  6  7
 a  b  c  2009-09-05 00:00:30  2009  09 05
 a  b  c  2009-09-05 00:01:00  2009  09  05
 a  b  c  2009-09-05 00:01:30  2009  09  05


.

.

.

.

이런식으로 해서 30초 4컬럼에 30초 간격으로 오늘 날짜 까지 데이터를 30초 간격으로 넣어줄려고 하는데;;

어떻게 해야 하는지 모르겠네요.;;

데이터 출력을 위해서 임의의 값을 넣는건데.. 5,6,7 컬럼은 4의 값을 넣어야하고;;

2009년 9월부터 해서 오늘 일까지 30초 간격으로 데이터 넣는 방법좀 가르쳐주세여.ㅜ_ㅜ

데이터가 너무 많아서 인서트 적기는 힘드네요..ㅜ_ㅜ

 

 

 

 

답변1

INSERT를 해주는 프로시저를 작성하신 후.. 실행 시키면 됩니다..

 

 

CREATE OR REPLACE PROCEDURE SP_INSERT_TEST (
   IN_STRT_DATE    IN VARCHAR2    --시작일을 인자값으로 넣어줌 (2009-09-01)
)
IS

 V_STRT_TIME   DATE;
 V_NOW_TIME   DATE;  
 V_NOW_TIME   DATE;
          
BEGIN
  -- 시작일 정의
  V_STRT_TIME := TO_DATE(IN_STRT_DATE || '00:00:00', 'YYYY-MM-DD HH24:MI:SS') ;
   
  LOOP

    --데이타 INSERT
    BEGIN
       INSERT INTO KWON_TEST0
    VALUES (V_STRT_TIME, TO_CHAR(V_STRT_TIME, 'YYYY'), TO_CHAR(V_STRT_TIME, 'MM'),TO_CHAR(V_STRT_TIME, 'DD'), 'A');
   END ;
  
   V_STRT_TIME := V_STRT_TIME + 0.00035;  --30초 증가
   EXIT WHEN V_STRT_TIME > SYSDATE ; --30초 씩 증가한 값이 현재일자 보다 크면 LOOP OUT
  
  END LOOP;
 
  COMMIT ;
 
END SP_INSERT_TEST;

 

 

 

답변2

먼저 테이블을 생성해줍니다.

create table t1(col1 varchar2(1),
                col2 varchar2(1),
                col3 varchar2(1),
                col4 date,
                col5 varchar2(4),
                col6 varchar2(2),
                col7 varchar2(2));


그리고 insert하려는 쿼리의 row수가 얼마나 되는지 알아봅니다.

SQL> select (sysdate-to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS'))*24*60*60/30 "level"
      from dual;


위 쿼리의 결과의 정수부분만 아래 쿼리의 level 뒤에 넣어줍니다.


SQL> insert into t1
     select 'a','b','c',
            to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30,
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'YYYY'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'MM'),
            to_char(to_date('2009-09-05 00:00:30','YYYY-MM-DD HH24:MI:SS')+(level-1)/24/60/60*30, 'DD')
     from dual
     connect by level <= 위 결과의 정수부분 넣는 곳;

 

 

PS) 참고로 날짜가 년월일밖에 나오지 않는다면 아래와 같이 세션의 날짜포맷을 변경해줍니다.

SQL> alter session set nls_date_format = 'DD-MON-RR HH24.MI.SS';


도움이 되셨길....

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,