programing

Oracle에서 CTE 생성

css3 2023. 7. 19. 21:31

Oracle에서 CTE 생성

다음을 생성하려고 합니다.CTEOracle기존 테이블에서 선택하지 않고 데이터가 삽입됩니다.현재 테이블을 만든 후 삭제하는 중입니다.query완료되었습니다.다음을 생성할 수 있는 방법이 있습니까?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'));

dual에서 날짜 값을 선택하고 모두 결합하여 공통 테이블 식(CTE, 하위 쿼리 팩터링 등)을 만들 수 있습니다.

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와 관련이 없지만 날짜 리터럴을 사용하여 입력을 조금 줄일 수 있습니다.

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;

언급URL : https://stackoverflow.com/questions/38775056/creating-a-cte-in-oracle