티스토리 뷰

Daylogs/DB

oracle view

ohgyun 2009. 2. 18. 10:39

http://sugame.tistory.com/184


VIEW 생성


empvu10
이라는 VIEW을 만듬

1 CREATE VIEW empvu10

2 AS SELECT empno, ename, job

3 FROM emp

4 WHERE deptno = 10

View created.

 

뷰 수정

empvu10의 컬럼을 구조를 바꾸고 컬럼에 별칭을 정의해 줌

1 CREATE OR REPLACE VIEW empvu10 (emp_number, emp_name)

2 AS SELECT empno, ename

3 FROM emp

4 WHERE deptno = 10

 

복합 뷰 생성

각 부서 급여를 최소, 최대, 평균을 구하는 뷰 생성함

1 CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)

2 AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)

3 FROM emp e, dept d

4 WHERE e.deptno = d.deptno

5 GROUP BY d.dname;

SQL> /

NAME               MINSAL     MAXSAL     AVGSAL

-------------- ---------- ---------- ----------

ACCOUNTING           1300       5000 2916.66667

RESEARCH               800       3000       2175

SALES                   950       2850 1566.66667

 

WITH CHECK OPTION - 수정 불가

뷰를 업데이트하지 못하도록 함, (WITH CHECK OPTION 옵션을 주지 않고 뷰의 deptno 업데이트하면 뷰에서 해당 레코드가 사라지는 경우가 발생할 수 있음)

1 CREATE OR REPLACE VIEW empvu20

2 AS SELECT *

3 FROM emp

4 WHERE deptno = 20

5 WITH CHECK OPTION CONSTRAINT empvu20_

 

empvu20 뷰의 empno 20인 사원의 deptno 10으로 바꿈, (에러 발생)

1 UPDATE empvu20

2 SET deptno = 10

3 WHERE empno = 7369

SQL> /

UPDATE empvu20 (에러 발생)  *

ERROR at line 1:

ORA-01402: view WITH CHECK OPTION where-clause violation

 

WITH READ ONLY - 읽기 전용

1 CREATE OR REPLACE VIEW empvu10 (emp_number, emp_name)

2 AS SELECT empno, ename

3 FROM emp

4 WHERE deptno = 10

5 WITH READ ONLY

 

#삭제 해보기

1 DELETE FROM empvu10

2 WHERE emp_number = 7782;

SQL> /

DELETE FROM empvu10 (에러 발생)         *

ERROR at line 1:

ORA-01752: cannot delete from view without exactly one key-preserved table



DROP VIEW -
뷰 제거

1 DROP VIEW empvu10

SQL> /

View dropped.

 


인라인 뷰

각 부서의 평균 급여보다 많은 급여를 받는 사원을 출력함

1 SELECT a.ename, a.sal, a.deptno, b.salavg

2 FROM emp a, (SELECT deptno, AVG(Sal) salavg

3                 FROM emp

4                 GROUP BY deptno) b

5 WHERE a.deptno = b.deptno AND a.sal > b.salavg
반응형
댓글
공지사항