Oracle
18. Chapter12 Other DB Objects(20081104)
Gungume
2009. 1. 9. 10:49
Usages of View (P12-3)
- select, update 등은 로그인한 계정이 해당 권한을 가지고 있으므로 가능한 것.
- 컬럼 등 데이터 내용에만 권한을 줄 수 있음.
- emp20이라는 view를 만들고 deptno가 20인 사용자들에게만 권한을 줌 -> 전체 emp에 대한 권한은 없으므로 전체에 대한 조회는 안되고 deptno가 20인 사람은 emp20만 조회가능(보안 문제~)
CREATE VIEW (P12-4)
- FORCE & NO FORCE
- NO FORCE(기본값) : VIEW를 만들 때 AS 다음의 SELECT문에 문제가 없어야 함(emp테이블을 사용해서 emp20을 view로 만들려고 하는데 emp테이블이 없다면 에러~)
- FORCE : VIEW를 먼저 만들고 BaseTable를 나중에 만들 때 사용(emp 테이블이 없어도 그것을 사용해서 만드는 emp20 view 생성가능)
- // 기본값 : NO FORCE
- SQL> CREATE OR REPLACE VIEW test
2 AS
3 SELECT empno FROM ttttt;
SELECT empno FROM ttttt
*
ERROR at line 3:
ORA-00942: table or view does not exist - // FORCE로 설정 : 경고는 뜨지만 VIEW 생성 됨 (ttttt 테이블은 나중에 생성하면 됨~)
- SQL> CREATE OR REPLACE FORCE VIEW test
2 AS
3 SELECT empno FROM ttttt; - Warning: View created with compilation errors.
CREATE VIEW (P12-6)
- SQL> CREATE VIEW emp20
2 AS SELECT empno, ename, sal
3 FROM emp WHERE deptno=20; - View created.
- SQL> DESC emp20;
Name Null? Type
----------------------------------------- -------- ------------- - EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
SAL NUMBER(7,2) - // emp20 이라고 쓴 부분에는 VIEW의 내용이 복사되어서 들어옴(CREATE VIEW에서 'SELECT empno, ename, sal FROM emp WHERE deptno=20;' 부분)
- // emp20 이라는 테이블이 따로 생성되고 그 테이블에서 결과를 가져오는 것이 아님(일종의 서브쿼리 처럼~)
- SQL> SELECT * FROM emp20;
- EMPNO ENAME SAL
---------- ---------- ------------
7369 SMITH $5,000
7566 JONES $5,000
7788 SCOTT $5,000
7876 ADAMS $5,000
7902 FORD $5,000
- CREATE VIEW = VIEW 새로 만들 때 사용
- CREATE OR REPLACE VIEW = VIEW 새로 만들거나 변경할 때 사용(ALTER 처럼~)
- // () 안의 내용은 SELECT 다음의 컬럼명으로 각각 맵핑
- // 생략시 그냥 컬럼명 사용~
- SQL> CREATE OR REPLACE VIEW emp20(eno, name, payroll)
2 AS SELECT empno, ename, sal
3 FROM emp WHERE deptno=20; - View created.
- SQL> SELECT * FROM emp20;
- ENO NAME PAYROLL // 위 쿼리문에서 () 안의 내용으로 출력됨~
---------- ---------- ----------
7369 SMITH 5000
7566 JONES 5000
7788 SCOTT 5000
7876 ADAMS 5000
7902 FORD 5000
- 사원이름과 부서이름을 볼 수 있는 VIEW
- 자주 쓰이는 복잡한 질의문을 VIEW로 만든 후 간단하게 사용~
- SQL> CREATE OR REPLACE VIEW empdept
2 AS
3 SELECT e.ename as ename, d.dname as dname
4 FROM emp e, dept d
5 WHERE e.deptno = d.deptno; - View created.
- SQL> SELECT * FROM empdept;
- ENAME DNAME
---------- --------------
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH - ENAME DNAME
---------- --------------
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING - 14 rows selected.
- VIEW에서 BASE TABLE = VIEW를 만드는데 사용한 테이블 -> empdept에서 emp, dept 테이블이 BASE TABLE
이 글은 스프링노트에서 작성되었습니다.