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 생성가능)

 

  1. // 기본값 : NO FORCE
  2. 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

  3. // FORCE로 설정 : 경고는 뜨지만 VIEW 생성 됨 (ttttt 테이블은 나중에 생성하면 됨~)
  4. SQL> CREATE OR REPLACE FORCE VIEW test
      2  AS
      3  SELECT empno FROM ttttt;
  5. Warning: View created with compilation errors.

 

 

CREATE VIEW (P12-6)

  1. SQL> CREATE VIEW emp20
      2  AS SELECT empno, ename, sal
      3  FROM emp WHERE deptno=20;
  2. View created.
  3.  
  4. SQL> DESC emp20;
     Name                                      Null?    Type
     ----------------------------------------- -------- -------------
  5.  EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                              VARCHAR2(10)
     SAL                                                NUMBER(7,2)
  6.  
  7. // emp20 이라고 쓴 부분에는 VIEW의 내용이 복사되어서 들어옴(CREATE VIEW에서 'SELECT empno, ename, sal FROM emp WHERE deptno=20;' 부분)
  8. // emp20 이라는 테이블이 따로 생성되고 그 테이블에서 결과를 가져오는 것이 아님(일종의 서브쿼리 처럼~)
  9. SQL> SELECT * FROM emp20;
  10.      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 처럼~)
  1. // () 안의 내용은 SELECT 다음의 컬럼명으로 각각 맵핑
  2. // 생략시 그냥 컬럼명 사용~
  3. SQL> CREATE OR REPLACE VIEW emp20(eno, name, payroll)
      2  AS SELECT empno, ename, sal
      3  FROM emp WHERE deptno=20;
  4. View created.
  5.  
  6. SQL> SELECT * FROM emp20;
  7.        ENO NAME          PAYROLL   // 위 쿼리문에서 () 안의 내용으로 출력됨~
    ---------- ---------- ----------
          7369 SMITH            5000
          7566 JONES            5000
          7788 SCOTT            5000
          7876 ADAMS            5000
          7902 FORD             5000

 

  • 사원이름과 부서이름을 볼 수 있는 VIEW
  • 자주 쓰이는 복잡한 질의문을 VIEW로 만든 후 간단하게 사용~
  1. 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;
  2. View created.
  3.  
  4. SQL> SELECT * FROM empdept;
  5. ENAME      DNAME
    ---------- --------------
    SMITH      RESEARCH
    ALLEN      SALES
    WARD       SALES
    JONES      RESEARCH
    MARTIN     SALES
    BLAKE      SALES
    CLARK      ACCOUNTING
    SCOTT      RESEARCH
    KING       ACCOUNTING
    TURNER     SALES
    ADAMS      RESEARCH
  6. ENAME      DNAME
    ---------- --------------
    JAMES      SALES
    FORD       RESEARCH
    MILLER     ACCOUNTING
  7. 14 rows selected.

 

  • VIEW에서 BASE TABLE = VIEW를 만드는데 사용한 테이블 -> empdept에서 emp, dept 테이블이 BASE TABLE

이 글은 스프링노트에서 작성되었습니다.