본문 바로가기
Oracle/View

데이터 베이스_ 오라클 VIEW [view 종류, 관리] 단순뷰 1편

by Super Santj 2019. 7. 2.

오라클의 view 는

단순뷰, 복합뷰로 나뉘어집니다.

 

**중요**

단순뷰 =

하나의 테이블로 만들어진 뷰로  DML이 가능합니다. 그룹함수, distinct 사용이 불가합니다.

 

복합뷰 =

여러개의 테이블로 만들어진 뷰입니다. 예를 들면 Join 이 될수가 있지요

하지만 DML이 불가능합니다. 그룹함수, distinct 사용이 가능합니다.

단순뷰

복합뷰

하나의 테이블로 생성 여러개의 테이블로 생성
그룹 함수의 사용이 불가능 그룹함수의 사용이 가능
distinct 사용이 불가능 distinct 사용이 가능
DML 사용이 가능 DML 사용이 불가능

단순뷰는 DML이 가능하다 하지만 예외 조항이있다.

 

1. delete가 안되는 경우

공통=> {그룹함수를 사용하거나, group by, distinct를 사용한 경우}

 

2. insert, update가 안되는 경우

공통=> {그룹함수를 사용하거나, group by, distinct를 사용한 경우, 별칭부여를 하였거나 계산함수를 사용한 경우 즉 가상필드를 사용한 경우, select, rownum}

 

핵심포인트

존재하지 않은 가상필드를 사용->insert,update,delete 실행이 안된다.

 

**중요**

미리 만들어 놓은 b_emp5 테이블에서 -> DML (데이터 수정)

 

뷰를 만든다.

 

그리고 여기서

문제 1번

부서번호가 30인 사원의 이름, 급여, 부서번호만 보여주는 뷰를 작성 하라. 뷰 이름은(V_30)

 

해설_

그리고 뷰를 만들때의 조건이 없고 단순히 뷰를 만들어라 라고한다면, or replace 를 사용 하던지 기본 법을 사용하던지 상관이없다. 하지만 조건이 있다면 반드시 조건대로 해야한다.

 

cerSQL> create view v_30 as select ename,sal,deptno from b_emp5
  2  where deptno=30;

뷰가 생성되었습니다.

 

SQL> select * from v_30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
ALLEN            1600         30          //해당 사원의 1개월 감봉(기존 sal 값을 1600->0으로)
WARD             1250         30
MARTIN           1250         30
BLAKE            2850         30
TURNER           1500         30
JAMES             950         30

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

 

우선 뷰를 생성하였다. 30번 b_emp5 테이블에서 30번 부서의 데이터만 생성된 내용,

그리고 위의 뷰 데이터를 수정해야한다. 예를들어 알렌의 급여를 감봉을 하게된다면,,,

수정 형식은

1)

update 변경시킬 테이블명 set 변경할 필드명 = 값,,, where 조건식

          ============

            뷰이름

참고_(기본적으로 insert delete select 는 기본적으로 숙지를 하고있어야 한다.)

 

정답_

SQL> update v_30 set sal=0 where ename='ALLEN';  //필드명을 설정하고, where 뒤에 수정할 데이터를 지정한다.

1 행이 갱신되었습니다.

SQL> select * from v_30;    //변경이 됬는지 확인하기위해 사용된 호출 명령어

ENAME             SAL     DEPTNO
---------- ---------- ----------
ALLEN               0         30
WARD             1250         30
MARTIN           1250         30
BLAKE            2850         30
TURNER           1500         30
JAMES             950         30

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

 

부록_

수정을 잘못하여, 원래 상태로 다시 되돌려야하는 상황이 주어질수있기때문에 실행 취소에대한 대비도 해야한다.

이때의 명령어는 sql> rollback;

위의 명령어는 [insert,update,delete] 즉 DML만 가능하다.

하지만 "롤백" 명령어는 그 직전 작성한지 얼마 안된 데이터만 실행 취소가 가능하다.!

 

SQL> rollback;

롤백이 완료되었습니다.

SQL> select * from v_30;

ENAME             SAL     DEPTNO
---------- ---------- ----------
ALLEN            1600         30
WARD             1250         30
MARTIN           1250         30
BLAKE            2850         30
TURNER           1500         30
JAMES             950         30

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

댓글