
💡 임시 테이블은 데이터를 영구히 저장하는게 아니라
잠깐 임시로 저장할 테이블을 생성할 때 유용한 테이블
- 영구히 데이터를 저장할 수 있는 테이블 : heap table
- 임시로 데이터를 저장할 수 있는 테이블 : temporary table
- commit 할 때까지만 데이터를 보관하는 테이블
관련옵션 :on commit delete rows- 세션을 종료할 때까지만 데이터를 보관하는 테이블
관련옵션:on commit preserve rows
create global temporary table emp_temp1
( empno number(10),
ename varchar2(20),
sal number(10) )
on commit delete rows;
insert into emp_temp1(empno, ename, sal)
select empno, ename, sal
from emp;
select * from emp_temp1;
-- emp_temp1 테이블의 데이터 사라짐
commit;
select * from emp_temp1;
create global temporary table dept_temp1
( deptno number(10),
dname varchar2(14),
loc varchar2(13) )
on commit delete rows;
insert into dept_temp1
select *
from dept;
select * from dept_temp1;
commit;
select * from dept_temp1;
create global temporary table dept_temp1
( deptno number(10),
dname varchar2(14),
loc varchar2(13) )
on commit delete rows;
insert into dept_temp1
select *
from dept;
select * from dept_temp1;
commit;
select * from dept_temp1;
drop table dept_temp1;
create global temporary table dept_temp2
on commit delete rows
as
select *
from dept
where 1 = 2;
select * from dept_temp2;
insert into dept_temp2
select *
from dept;
select *from dept_temp2;
commit;
select * from dept_temp2;
create global temporary table emp_temp2
on commit preserve rows
as
select *
from emp
where 1 = 2;
select * from emp_temp2;
insert into emp_temp2
select *
from emp;
select *from emp_temp2;
commit;
select * from emp_temp2;
, 일 , 월 , 화 , 수 , 목 , 금 , 토 , 미상
절도 ,33333,36789,35410,38103,36553,38617,37517,358
장물 ,279,403,441,882,466,447,442,21
손괴 ,6438,5570,5899,5795,5869,6386,6908,86
살인 ,209,203,183,204,194,203,178,16
강도 ,944,853,894,904,946,934,877,27
... 등등
create table crime_day
( crime_name varchar2(100),
sun number(10),
mon number(10),
tue number(10),
wed number(10),
thu number(10),
fri number(10),
sat number(10),
unknown number(10) );
select * from crime_day;
create or replace view crime_day_view # create table 해도 됨
as
select *
from crime_day
unpivot (건수 for 요일 in (SUN, MON, TUE, WED, THU, FRI, SAT));
select * from crime_day_view;
select *
from ( select crime_name, 요일, 건수, rank() over (order by 건수 desc) 순위
from crime_day_view
where trim(crime_name)='살인' ) # 또는 crime_name like '%살인%'
where 순위 = 1;