2016-08-04 28 views
5

Próbuję utworzyć CTE w Oracle, który nie wybiera z istniejącej tabeli, ale zamiast tego ma dane wstawione do niego. Obecnie tworzę tabelę, a następnie upuszczam ją po zakończeniu zapytania. Czy istnieje sposób na stworzenie CTE, który skutecznie robi to samo? To jest mój bieżący kod:Tworzenie CTE w Oracle

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')); 

Odpowiedz

8

Można utworzyć wspólny stół wyrażenie (CTE, subquery factoring, itp) przez wybranie wartości daty z podwójnym i unioning je wszystkie razem:

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 

Not związane to jest CTE, ale można zmniejszyć wpisując trochę za pomocą 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

Dzięki! Widziałem inne posty mówiące o podwójnym stole, ale nie byłem pewien, co to było. To naprawdę pomaga. – mosk915

+0

@ mosk915 - dokumentacja dotycząca [wybierania z DUAL] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries009.htm#SQLRF20036) wyjaśnia to nieco. –