ORACLE/문제해결
두 테이블을 조인하여 만든 VIEW에 값을 추가할수 있는가?
zammanza
2012. 3. 14. 18:14
질문----------------------------------------------------------------
create or replace view test
create or replace view test
as
select e.empno, d.deptno
from emp e, dept d
where e.deptno = d.deptno
with check option
- emp테이블 + dept테이블 =>test 뷰 생성
(empno,deptno 은 각각의 테이블의 기본키)
그리고선
- emp테이블 + dept테이블 =>test 뷰 생성
(empno,deptno 은 각각의 테이블의 기본키)
그리고선
insert into test
결론----------------------------------------------------------------
10g에서 서로 다른 테이블의 칼럼을 조인하여 만든 뷰의 경우 데이터의 추가는 제한적이다.
values(1234,10)
를 실행하였더니
"ORA-01733: 가상 열은 사용할 수 없습니다"
두 테이블을 조인하여 만든 뷰에는 값을 추가 할수 없는건가?
답변----------------------------------------------------------------
테스트해보니 재미있는 결과가 나오네요.
11g 에서는 에러 안나네요.
10g 에서는 에러가 나구요.
실행계획을 비교해 봤더니
11g 에서는 fk_dept 인덱스를 이용하여
deptno가 널이 아닌 rowid 를 가져와 emp 테이블을 스캔합니다.
즉, d.deptno 를 읽지 않는 것이죠.
아마 실행쿼리가 변형되어 d.deptno 가 e.deptno 로 봐뀌었을 듯 하네요.
혹시나 해서 fk_deptno 인덱스를 삭제하고 했더니.
그냥 emp 풀스캔 하네요. 역시나 dept 테이블은 읽지 않습니다.
결론은 d.deptno 가 e.deptno 로 바뀌어
두개 컬럼이 모두 emp의 컬럼이 되며 Insert 를 수행하면 문제 없이 emp로 입력됩니다.
그러나 10g의 실행계획을 확인해 보면
dept 테이블이나 인덱스를 읽어 emp 와 조인합니다.
즉, d.deptno 는 dept의 컬럼이고 e.empno 는 emp 의 컬럼인거죠.
쿼리 변형이 읽어나지 않았습니다.
두개 컬럼이 서로 다른 테이블을 바라보고 잇어서 입력이 안됩니다.
쿼리를 d.deptno 대신 e.deptno 로 바꾸시면 입력됩니다.
출처 : http://oracleclub.com/article/55478
를 실행하였더니
"ORA-01733: 가상 열은 사용할 수 없습니다"
두 테이블을 조인하여 만든 뷰에는 값을 추가 할수 없는건가?
답변----------------------------------------------------------------
테스트해보니 재미있는 결과가 나오네요.
11g 에서는 에러 안나네요.
10g 에서는 에러가 나구요.
실행계획을 비교해 봤더니
11g 에서는 fk_dept 인덱스를 이용하여
deptno가 널이 아닌 rowid 를 가져와 emp 테이블을 스캔합니다.
즉, d.deptno 를 읽지 않는 것이죠.
아마 실행쿼리가 변형되어 d.deptno 가 e.deptno 로 봐뀌었을 듯 하네요.
혹시나 해서 fk_deptno 인덱스를 삭제하고 했더니.
그냥 emp 풀스캔 하네요. 역시나 dept 테이블은 읽지 않습니다.
결론은 d.deptno 가 e.deptno 로 바뀌어
두개 컬럼이 모두 emp의 컬럼이 되며 Insert 를 수행하면 문제 없이 emp로 입력됩니다.
그러나 10g의 실행계획을 확인해 보면
dept 테이블이나 인덱스를 읽어 emp 와 조인합니다.
즉, d.deptno 는 dept의 컬럼이고 e.empno 는 emp 의 컬럼인거죠.
쿼리 변형이 읽어나지 않았습니다.
두개 컬럼이 서로 다른 테이블을 바라보고 잇어서 입력이 안됩니다.
쿼리를 d.deptno 대신 e.deptno 로 바꾸시면 입력됩니다.
출처 : http://oracleclub.com/article/55478
결론----------------------------------------------------------------
10g에서 서로 다른 테이블의 칼럼을 조인하여 만든 뷰의 경우 데이터의 추가는 제한적이다.