본문 바로가기
Oracle/View

데이터 베이스_ 오라클 VIEW [view 종류, 관리] 복합뷰 활용 3

by Super Santj 2019. 7. 2.

뷰(view)를 통해서 제약조건을 줄 수가 있다. 단 반드시 옵션을 주어야한다.

[with check option] 옵션, 사용할지 말지 선택하는 옵션이다. 해당 옵션은 맨 뒤에 붙인다.

 

바로! 나갑니다ㅎㅎ

 

문제_

emp 테이블을 복사하여 미리 만들어 놓은 b_emp5 테이블을 이용 emp30(30번 부서만 가진) 뷰를 작성하여라.

단 뒤에 with check option을 부여해서 작성하시오. (모든 정보를 부여줄것 * )

 

해설_ 

~ with check option constraint 제약조건이름;   <=양식

 

SQL> create or replace view emp30
  2  as select * from b_emp5
  3  where deptno=30
  4  with check option constraint emp30_ck;           //해당 구문때문에 제약조건이 적용이 되는것이다.

뷰가 생성되었습니다.

 

SQL> select * from emp30;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300
        30

      7521 WARD       SALESMAN        7698 81/02/22       1250        500
        30

      7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400
        30


     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM
---------- ---------- --------- ---------- -------- ---------- ----------
    DEPTNO
----------
      7698 BLAKE      MANAGER         7839 81/05/01       2850
        30

      7844 TURNER     SALESMAN        7698 81/09/08       1500          0
        30

      7900 JAMES      CLERK           7698 81/12/03        950
        30


6 개의 행이 선택되었습니다.

 

위와 같은경우 10,20번 부서가 해당이 안되기 때문에 10,20번 부서는 업데이트가 가능하나,

30번부서의 경우 수정이 불가 즉 업데이트가 불가하다.

 

그래서 우리는 이렇게 해볼수가 있다.

부서번호를 30번 으로 변경하는 SQL 작성?(수정이 되는지 확인)

 

먼저 존재 여부 확인

 

SQL> select empno from b_emp5 where empno=7566;

     EMPNO
----------
      7566

우선 존재한다는것을 확인 가능 그리고 갱신(업데이트)을 해본다면

 

SQL> update emp30
  2  set deptno=30
  3  where empno=7566;

0 행이 갱신되었습니다.             //0행이 갱신되었다는것은 갱신이 되지 않았다는것을 의미한다.

즉 조건에 만족하는 30번부서의 데이터에 한해서 수정이 가능하다.

 

 

댓글