반응형
데이터 딕셔너리(Data Dictionary)
- 자원을 효율적으로 관리하기 위해 다양한 정보를 저장하는 시스템 테이블
- 사용자가 테이블을 생성하거나, 사용자를 변경하는 등의 작업을 할 때 데이터베이스 서버에 의해 자동으로 갱신되는 테이블로 사용자는 데이터 딕셔너리 내용을 직접 수정하거나 삭제할 수 없다.
- 원본 테이블을 커스터마이징해서 보여주는 원본 테이블의 가상 테이블 객체(VIEW)이다.
DBA_XXX
데이터베이스 관리자만 접근이 가능한 객체 등의 정보 조회
ALL_XXX
자신의 계정 + 권한을 부여받은 객체의 정보 조회
USER_XXX
자신의 계정이 소유한 객체 등에 관한 정보 조회
VIEW
SELECT 쿼리문을 저장한 객체
실질적인 데이터를 저장하고 있지 않는 논리적인테이블
물리적인 테이블을 사용하는 것과 동일하게 사용 가능
1 . VIEW를 사용하는 이유
- 복잡한 SELECT문을 재작성할 필요가 없음
- 민감한 데이터를 숨길 수 있음
2 . VIEW 객체 생성 권한 부여
- 만들어 놓은 계정에 뷰 객체 생성 권환이 부여되어 있지 않을때 시스템 계정으로 변환하여 뷰 객체 생성 권한을 부여한 후 작업할 수 있다.
시스템 계정으로 접속 후
GRANT CREATE VIEW TO C##EMPLOYEE;
TO 뒤에는 접속 할 계정 아이디 입력
3. VIEW 작성 방법
- CREATE [OR REPLACE] VIEW 뷰이름 AS 서브쿼리;
- OR REPLACE 는 옵션. 똑같은 뷰의 이름이 있더라고 교체해 줌
VIEW 생성
CREATE OR REPLACE VIEW V_RESULT_EMP
AS
SELECT
EMP_ID
, EMP_NAME
, JOB_NAME
, DEPT_TITLE
, LOCAL_NAME
FROM EMPLOYEE E
VIEW 사용
SELECT
V.*
FROM V_RESULT_EMP V
WHERE V.EMP_ID = '205';
4. DML 명령어로 VIEW 조작이 불가능한 경우
- 뷰 정의에 포함되지 않은 컬럼을 조작하는 경우
- 뷰에 포함되지 않은 컬럼 중에, 베이스가 되는 테이블 컬럼이 NOT NULL 제약조건이 지정 된 경우
- 산술 표현식으로 정의 된 경우(DELETE의 조건으로는 사용 가능)
- JOIN을 이용해 여러 테이블을 연결한 경우
- DISTINCT를 포함한 경우
- 그룹함수나 GROUP BY절을 포함한 경우
5 . VIEW 옵션
- OR REPLACE : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고, 존재하지 않으면 새로 생성하는 옵션
- NOFORCE : 서브쿼리에 테이블이 존재해야만 뷰를 생성함(기본값)
- FORCE : 서브쿼리에 사용 된 테이블이 존재하지 않아도 뷰 생성
CREATE FORCE VIEW V_EMP
AS
SELECT TCODE
, TNAME
, TCONTENT
FROM TT; <- 존재하지 않은 테이블
- WITH CHECK OPTION : 조건절에 사용 된 컬럼의 값을 수정하지 못하게 함
CREATE OR REPLACE VIEW V_EMP2
AS
SELECT
E.*
FROM EMPLOYEE E
WHERE MANAGER_ID = '200'
WITH CHECK OPTION;
-- 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다.
UPDATE
V_EMP2
SET MANAGER_ID = '900'
WHERE MANAGER_ID = '200';
- WITH READ ONLY : DML 수행이 불가능하게 함.
CREATE OR REPLACE VIEW V_DEPT
AS
SELECT
D.*
FROM DEPARTMENT D
WITH READ ONLY;
-- 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다.
DELETE
FROM V_DEPT;
반응형