인라인뷰 ,VIEW 만들기
1.인라인 뷰 (INLINE VIEW) - FROM 구문에서 쓰는 서브쿼리
VIEW : 테이블은아니지만 SELECT 한결과물을 TABLE 처럼 간주해서 본것을 VIEW라고 한다.
필요한 데이터를 연산과정을 통해 만들어냈을때
그것을 직접 테이블을 만들고 이를 활용하는 것은
부담스러운일이다.
이럴때는 뷰를 활용한다.
예를들면
SELECT EXTRACT(YEAR FROM SYSDATE)
- (CASE
WHEN SUBSTR(JUBUN, 7, 1) IN ('1','2')
THEN TO_NUMBER( SUBSTR(JUBUN, 1, 2) ) + 1900
ELSE TO_NUMBER( SUBSTR(JUBUN, 1, 2) ) + 2000
END )
+ 1 AS "현재나이",
CASE
WHEN SUBSTR(JUBUN,7,1) IN (1,3) THEN '남'
ELSE '여'
END AS "성별",
NVL2(COMM,SAL*12+COMM,SAL*12) AS "연봉"
FROM TBL_NEWSAWON;
위같이 복잡한 쿼리문이 있다고 하자 각 복잡한 연산들을
테이블에서 사원의 성별과, 나이, 연봉등을 구하기위해
행해진 연산들이다.
이런 결과물들을 다시 이용해야한다면 예를들어서 퇴직까지 지급해야하는
연봉을 계산해 본다고 할때 우린 다시 나이와 연봉 데이터를 이용해야한다.
이를위해서 다시 위에있는 연봉과 나이를 이용한 쿼리문을 쓰고 이것을 다시
연산해야한다 쿼리문도 길어지고 복잡해보인다. 이때 이 전체 쿼리문자체가
다시 쓰일때 FROM 구문으로 넣고 별칭처리하는 법이 있다.
SELECT T.성별,
...연봉계산쿼리문 (T.연봉 * T.현재나이...)... as "퇴직까지지급해야할연봉"
->
FROM
(SELECT EXTRACT(YEAR FROM SYSDATE)
- (CASE
WHEN SUBSTR(JUBUN, 7, 1) IN ('1','2')
THEN TO_NUMBER( SUBSTR(JUBUN, 1, 2) ) + 1900
ELSE TO_NUMBER( SUBSTR(JUBUN, 1, 2) ) + 2000
END )
+ 1 AS "현재나이",
NAME AS "사원이름",
CASE
WHEN SUBSTR(JUBUN,7,1) IN (1,3) THEN '남'
ELSE '여'
END AS "성별",
NVL2(COMM,SAL*12+COMM,SAL*12) AS "연봉"
FROM TBL_NEWSAWON;)T
FROM 이하 쿼리문이 T라는것으로 대체되였다. 따라서
SELECT문에서 T.필드명 을통해서 해당 데이터로 접근이 가능하다.
이처럼하면 복잡한 쿼리문을 통해 얻거나 자주쓰는 쿼리문의 경우
간단한 별칭으로 대체하므로 쿼리문이 간단해지고, 해석도 편하다.
2. VIEW 등록
자주쓰는 SELECT 결과물을 View자체에 저장해두면 편리하다
우린 VIEW이름을 통해서 해당데이터에 접근할수 있다.
CREATE OR REPLACE VIEW이름
(참고로 view 만들기 권한 또한 sys에서 줘야함
GRANT CREATE VIEW TO NEWSCOTT;)