2016-08-04 3 views
5

기존 테이블에서 선택하지 않고 데이터를 삽입 한 Oracle에서 CTE를 생성하려고합니다. 현재, 테이블을 작성한 후 조회가 완료된 후이를 h 제하고 있습니다. 효과적으로 동일한 작업을 수행하는 CTE를 만드는 방법이 있습니까? 이것은 내 현재 코드 :Oracle에서 CTE 생성

create table RTG_YEARS 
(YR date); 

insert into RTG_YEARS values (to_date('2013-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2013-12-31', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2014-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2014-12-31', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2015-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2015-12-31', 'yyyy-mm-dd')); 

답변

8

당신은 이중에서 날짜 값을 선택하고 모두 함께 unioning하여 공통 테이블 표현식 (CTE, subquery factoring 등)을 만들 수 있습니다

with RTG_YEARS (YR) as (
    select to_date('2013-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2013-12-31', 'yyyy-mm-dd') from dual 
    union all select to_date('2014-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2014-12-31', 'yyyy-mm-dd') from dual 
    union all select to_date('2015-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2015-12-31', 'yyyy-mm-dd') from dual 
) 
select * from RTG_YEARS; 

YR  
---------- 
2013-01-01 
2013-12-31 
2014-01-01 
2014-12-31 
2015-01-01 
2015-12-31 

되지 않음을 CTE와 관련이 있지만 date literals을 사용하여 타이핑을 조금 줄일 수 있습니다.

with RTG_YEARS (YR) as (
    select date '2013-01-01' from dual 
    union all select date '2013-12-31' from dual 
    union all select date '2014-01-01' from dual 
    union all select date '2014-12-31' from dual 
    union all select date '2015-01-01' from dual 
    union all select date '2015-12-31' from dual 
) 
select * from RTG_YEARS; 
+0

감사합니다. 나는 다른 게시판이 듀얼 테이블에 관해 말하는 것을 보았지만 그것이 무엇인지는 확실하지 않았습니다. 이것은 정말로 도움이됩니다. – mosk915

+0

@ mosk915 - [DUAL에서 선택]에 대한 설명서 (http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries009.htm#SQLRF20036)에서 약간 설명합니다. –