Oracle SQL 강좌
VIEW 테이블 24 14 99,999+

by 김정식 VIEW CREATE VIEW WITH CHECK OPTION WITH READ ONLY DROP VIEW [2002.01.20]


뷰란?

  • - 뷰는 하나의 가상 테이블이라 생각 하면 된다.
  • - 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할수 있다.
  • - 뷰는 복잡한 Query를 통해 얻을 수 있는 결과를 간단한 Query로 얻을 수 있게 한다.
  • - 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.
  • - 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.

뷰의 제한 조건.

  • - 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.
  • - ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 INSERT 할 수 없다
  • - WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.
  • - WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제,수정을 할 수 있다

뷰 문법

  • - FORCE : 기본 테이블 유무에 관계없이 VIEW를 생성
  • - WITH CHECK OPTION : VIEW에 의해 엑세스될 수 있는 행만이 입력되거나 변경될 수 있음을 지정
  • - WITH READ ONLY : SELECT만 가능한 VIEW 생성
  • - 함수를 사용한 컬럼은 반드시 ALIAS를 지정해야 한다.

뷰 예제

 
-- 뷰 생성    
SQL> CREATE OR REPLACE VIEW name_query
     AS
       SELECT a.ename, b.dname
       FROM  emp a, dept b
       WHERE a.deptno = b.deptno
         AND b.deptno = 20;

-- 뷰를 이용한 조회
SQL> SELECT * FROM name_query; 

ENAME                DNAME
-------------------- ----------
SMITH                RESEARCH
JONES                RESEARCH
...
	

WITH CHECK OPTION

뷰의 조건식을 만족하는 데이터만 INSERT 또는 UPDATE가 가능 하도록 하는 옵션 이다.

 
-- 부서 번호 10의 데이터를 조회 하는 뷰
SQL> CREATE OR REPLACE VIEW check_option
     AS
       SELECT empno, ename, deptno
       FROM  emp
       WHERE deptno = 10
       WITH CHECK OPTION ;
 
-- 부서 번호가 10인 사원만 INSERT, UPDATE할 수 있다. 
SQL> INSERT INTO check_option(empno, ename, deptno) 
     VALUES (10005, 'jain', 30);

INSERT INTO check_option(empno, ename, deptno)
            *
1행에 오류:
ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다
    

WITH READ ONLY

SELECT만 가능한 VIEW를 생성 한다

 
-- 아래 뷰는 읽기만 가능하다.
SQL> CREATE OR REPLACE VIEW read_only
     AS
       SELECT empno, ename, deptno
       FROM  emp
       WHERE deptno = 10
       WITH READ ONLY;
    

뷰의 정보 조회

USER_VIEWS 데이터 사전을 통해서 뷰에 대한 정보를 조회 할 수 있다.

 
SQL> SELECT view_name, text
     FROM USER_VIEWS;    
    

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1036

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 박주의 [2003.12.22 09:33:23]
"VIEW를 정의하는 질의어에는 ORDER BY절을 사용 할 수 없습니다." 라고 되어있는데 8i 부터는 사용가능한 것 같습니다. 그럼 수거하세요~~

by 김정식 [2004.01.06 21:28:04]
예..고맙습니다.. 8i부터는 당근 Order By를 사용 할 수 있습니다.

by KIMANA [2004.06.29 15:59:04]
VIEW수정은 어떻게하나요?

by 박민규 [2004.07.02 10:08:51]
테이블에 NOT NULL로만든 컬럼들이. 뷰에 다 포함이 되 있어야 됩니다.
이 말은 9i 버전에는 해당 안되는 듯 합니다. 한참을 고심했네염.... -_-;;

by MUR [2005.05.18 09:13:47]
뷰는 뷰입니다. 별도의 Object입니다.
뷰를 저장된쿼리 또는 가상테이블이라고 설명할 수도 있습니다만..
뷰에 테이블이란 말을 붙이는 것은 적합치 않은 거 같습니다.
여기를 이용하시는 많은 분들을 위해 재고해주시길 바랍니다.
^^

by wis [2005.06.13 14:23:17]
글쎄요.. 뷰는 가상테이블이라고 칭하는것도 별로 무리가 없을것 같네요

by smile [2005.11.09 20:33:16]
퍼갑니다. ^^

by 변원상 [2006.10.12 17:09:52]
뷰는 가상테이블이 아닙니다.
까불면 맞습니다.

by 초보 [2007.02.09 10:52:45]
저...뷰를 통해서 베이스테이블에 데이타 입력이 가능하던데요..
그럼 뷰라는게 도대체 뭐죠..?
알기쉽게 설명좀..ㅠ.ㅠ
뷰를 왜쓰는지...그냥 테이블 쓰면안되나요..?
제발..제가 왕초보라...쉬운답변좀요..ㅠ

by 고재균 [2007.03.07 14:15:33]
8i 부터 Order by 절을 사용할 수 있어 사용하고 있으나 어느 시점부터
느려지는 문제가 있는것 같습니다. 정확한 원인을 알고 있으시면 알려주세요.

by 문성환 [2008.07.10 15:34:54]
▣오라클지원툴없이 USER_VIEWS 의 소스내용 보기
USER_VIEWS 의 text 컬럼은 long type이라 그냥 select 하면 내용을 온전히 볼수 없음. 그래서 변환작업이 필요함.여타 오라클 툴에서 view스크립트조회시 느린것도 이방식으로 처리해서 그러지 않을까 생각함(내생각..).

1.임시테이블을 만든다.
create table temp
(
num number(8),
content clob
);

2.데이타를 추출한다.
insert into temp
(select TEXT_LENGTH, to_lob(text)
from USER_VIEWS
where VIEW_NAME = 'VIEW_NAME'
);

commit;

확인한다.
select to_char(content) from temp;

by 양한마리 [2010.02.03 13:40:58]
좋은 내용 감사합니다.

by 김종현 [2013.07.17 15:47:23]

view테이블을 원본 테이블과 다른게 타입 길이를 다르게 설정할수 있나요?

by 손창익 [2014.07.01 08:42:56]

VIEW란 일종의 테이블(원본)을 위한 窓 이라고 보심 될듯해요.

창을 통해 데이타를 보고 쬐끔 열어 물건을 넣는 통로가 되고...

위 김종현님 질문에 좋은 구분점이 보이네요.

뷰 정의를 통해 테이블의 데이타 타입을 좌우할 수는 없을 것 같네요.(오라클 버전이 20 이 되더라도^^)

마치 창을 새로 달아 펜션을 아파트로 바꿀 수 없는 것처럼..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입