Q :
view는 dml이 수행될까?
A :
simple view 일 경우는 dml이 수행되지만, table을 가공한 virtual column일 경우에는 dml 수행이 되지 않는다.
테스트를 해보자.
테이블을 생성하고, 데이터를 넣는다.
SQL> create table t1 (col1 number, col2 varchar2(100));
insert into t1
select level, 'A'
from dual
connect by level <= 10
union all
select level+12 , 'B'
from dual
connect by level <= 10
union all
select level+30, 'C'
from dual
connect by level <= 10;
commit;
insert into t1
select level, 'A'
from dual
connect by level <= 10
union all
select level+12 , 'B'
from dual
connect by level <= 10
union all
select level+30, 'C'
from dual
connect by level <= 10;
commit;
뷰를 생성하고 데이터를 넣는다.
SQL> create view m_t1
as
select * from t1
SQL> insert into m_t1 values (20, 'D');
as
select * from t1
SQL> insert into m_t1 values (20, 'D');
뷰를 확인했을 때도 데이터가 나오고, 테이블을 확인했을 때도 데이터가 나온다.
SQL> select * from m_t1 where col2 = 'D';
COL1 COL2
---------- --------------------
20 D
SQL> select * from t1 where col2 ='D';
COL1 COL2
---------- --------------------
20 D
COL1 COL2
---------- --------------------
20 D
SQL> select * from t1 where col2 ='D';
COL1 COL2
---------- --------------------
20 D
그러면 뷰의 정의를 조금 다르게 하고, 뷰에 데이터를 입력해보자.
create view m_t1_2
as
select sum(col1) as col1, col2
from t1
group by col2;
SQL> insert into m_t1_2 values (32, 'E');
insert into m_t1_2 values (32, 'E')
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
as
select sum(col1) as col1, col2
from t1
group by col2;
SQL> insert into m_t1_2 values (32, 'E');
insert into m_t1_2 values (32, 'E')
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
에러가 발생한다. 가상 컬럼은 여기에 들어갈 수 없다. 라고 나온다.
'Oracle > SQL' 카테고리의 다른 글
테이블 및 컬럼의 COMMENT 확인 (0) | 2016.11.18 |
---|---|
RANK() VS. DENSE_RANK() (0) | 2012.01.16 |
현재 SCN 구하기 (0) | 2010.10.01 |
히든 파라미터 확인 SQL (0) | 2010.09.01 |
Correlated Sub Query(상호관련 서브 쿼리) (1) | 2009.12.15 |