유가엘
개발일지
유가엘
전체 방문자
오늘
어제
  • 분류 전체보기 (107)
    • Solution (16)
      • EAI (11)
      • Concept (1)
      • webMethods (4)
    • Language (20)
      • Java (20)
    • DataBase (19)
      • Oracle (18)
    • Web Programming (38)
      • JSP (11)
      • Spring (10)
      • Project (17)
    • 협업도구 (8)
      • Git (8)
    • IT (6)
      • ETC (4)
      • 정보처리기사 (1)
      • Android (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

티스토리

hELLO · Designed By 정상우.
유가엘

개발일지

DataBase/Oracle

12. Oracle View

2020. 3. 30. 22:40

11.View.sql
0.00MB

View의 정의  

테이블과 유사하지만 저장하기 위한 물리적인 공간이 필요없는 가상의 테이블입니다.
데이터가 물리적인 공간을 차지않고 논리적 집합을 가집니다.
    
View의 사용은 는 크게 두가지 측면으로 나뉩니다.

보안 관리를 위하여 민감한 데이터를 보안등급에 맞춰 조회 할 수 있게 합니다.
테이블 명 , 혹은 컬럼 명을 숨김으로 결과만 제공하여 어떤 방식으로 출력되었는지 숨길 수 있습니다.
     
사용 편의성을 위하여 검색 조건을 단순화 하여 사용할 수 있습니다.


VIEW 의 기본 예제
VIEW 테이블 생성

CREATE VIEW V_EMP(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'ST_CLERK'; 

CREATE VIEW V_EMP1(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'SH_CLERK'; 

 

VIEW 테이블 제거

DROP VIEW V_EMP1; 

 

VIEW 테이블 수정

CREATE OR REPLACE VIEW V_EMP(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'ST_CLERK'; 

 

보안을 위한 View 테이블


VIEW 의 기본 예제

NVL로 설정하게 되면 해당 필드를 수정할 수 없도록 만들게 됩니다. 
CREATE VIEW V_EMP1(EMP_ID,FIRST_NAME,JOB_ID,HIRE_dATE,DEPT_ID) AS 
SELECT EMPLOYEE_ID, NVL(FIRST_NAME,NULL), JOB_ID, HIRE_DATE, DEPARTMENT_ID    -- 논리적인 집합 
FROM EMPLOYEES 
WHERE JOB_ID = 'SH_CLERK'; 

-- V_EMP1의 FIRST_NAME 은 수정 할 수 없는 형태로 만들어 두었기때문에 ' 가상 열 사용 불가 ' 메시지가 출력됩니다. 
UPDATE V_EMP1 SET FIRST_NAME ='KYLE' WHERE FIRST_NAME = 'Julia'; 

 

COMMISSION_PCT 항목 중 NULL이 존재한다면 0으로 치환합니다.

CREATE VIEW V_EMP_SALARY(EMP_ID, LAST_NAME, ANNUAL_SAL) AS 
SELECT EMPLOYEE_ID, LAST_NAME, (SALARY+NVL(COMMISSION_PCT,0))*12 
FROM EMPLOYEES; 

SELECT * FROM V_EMP_SALARY;

 

읽기 전용 테이블의 생성
생성시 WITH READ ONLY 속성을 주게 된다면 수정 할 수 없도록 적용합니다.

CREATE VIEW V_EMP_READONLY(EMP_ID, LAST_NAME, ANNUAL_SAL) AS 
SELECT EMPLOYEE_ID, LAST_NAME, (SALARY+NVL(COMMISSION_PCT,0))*12 
FROM EMPLOYEES WITH READ ONLY; 

SELECT * FROM V_EMP_READONLY; 
-- ' 읽기 전용 뷰에서 DML 작업 수행 불가 ' 메시지가 출력됩니다. 
UPDATE V_EMP_READONLY SET LAST_NAME ='KYLE' WHERE LAST_NAME = 'Grant'; 

편의성을 위한 View 테이블

복잡한 SELECT 구문을 쉽게 검색할 수 있도록 만들 수 있습니다.

CREATE VIEW V_CUSTOM AS 
SELECT EMPLOYEE_ID, LAST_NAME , DEPARTMENT_ID ,HIRE_DATE  
FROM EMPLOYEES 
WHERE (SALARY+NVL(COMMISSION_PCT,0))*12 > 30000 
AND DEPARTMENT_ID = 50 
AND JOB_ID = 'ST_CLERK' 
AND SYSDATE - 365*5 > HIRE_DATE; 

SELECT * FROM V_CUSTOM; 

 

사용자의 편의성을 위해 한글로 만들 수도 있습니다.

CREATE VIEW 사원 (사번, 이름, 부서번호, 입사일 ) AS 
SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME , DEPARTMENT_ID, HIRE_DATE 
FROM EMPLOYEES 
WHERE DEPARTMENT_ID = 50; 

SELECT * FROM 사원; 

CREATE VIEW V_JOIN(사번, 이름, 부서번호, 부서명, 입사일) AS 
SELECT EMP.EMPLOYEE_ID, EMP.FIRST_NAME||' '||EMP.LAST_NAME , EMP.DEPARTMENT_ID,  
        DEPT.DEPARTMENT_NAME, EMP.HIRE_DATE 
FROM EMPLOYEES EMP, DEPARTMENTS DEPT 
WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID; 

SELECT * FROM V_JOIN; 

 

저작자표시 비영리 변경금지 (새창열림)

'DataBase > Oracle' 카테고리의 다른 글

14. Oracle 계층형쿼리  (0) 2020.03.30
13. Oracle Sequence  (0) 2020.03.30
11. Oracle 무결성 제약조건  (0) 2020.03.28
10. Oracle DML(Insert, Update, Delete)  (0) 2020.03.26
9. Oracle DDL(Table 정의)  (0) 2020.03.26
    'DataBase/Oracle' 카테고리의 다른 글
    • 14. Oracle 계층형쿼리
    • 13. Oracle Sequence
    • 11. Oracle 무결성 제약조건
    • 10. Oracle DML(Insert, Update, Delete)
    유가엘
    유가엘

    티스토리툴바