database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 11338 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 11338
오라클 기본강좌(4)-VIEW 의 생성, 삭제
작성자
정재익(advance)
작성일
2002-07-12 21:33
조회수
10,029

5. 뷰(View) 생성, 삭제

(가) 뷰란 무엇인가?

뷰란? 데이터베이스내에 사용자에게는 column과 row로 구성된 테이블로 보이지만 "가상 테이블"로서 존재합니다.

뷰를 통해 볼 수 있는 데이터의 행과 열은 뷰을 정의한 SQL문에 의해 생성된 질의결과입니다.

 

(나) 뷰의 장점

·뷰는 사용자들이 필요에 따라 데이터베이스를 각기 다른 관점에서 볼 수 있도록 허용합니다.

·뷰는 사용자들이 테이블의 특정 열이나 행만을 볼 수 있도록 함으로써 사용자의 데이터 접근을 제한합니다.

·뷰는 각각의 사용자에 대해 관심있는 데이터만을 보여줌으로써 사용자의 데이터 접근을 단순화합니다.

(1)뷰 생성

뷰는 Simple 뷰와 Comple 뷰로 나눌 수 있습니다.

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 뷰

[(aliss[, aaless]....)]

AS Subquery

[WITH CHECK OPTION [CONSTRAINT 제약조건]]

[WITH READ ONLY]

 

 

Simple 뷰 와 Comple 뷰의 비교

 

                       Simple 뷰                                    Comple 뷰   
테이블의 수         하나                                          하나 이상         
데이터 그룹 포함 가능 여부        가능                      가능         
뷰를 통한 DML     가능                                           불가능          

 

회원종목코드가 102인 회원의 회원번호와 이름, 전화번호, 주소, 점수를 가지는 뷰를 만들고 내용을 display합니다.

SQL> create view membervu102

2 as select no, name, tel, addr, jumsu

3 from member

4 where code=102;

뷰가 생성되었습니다.

SQL> select * from membervu102;

NO NAME TEL ADDR JUMSU

------------------------------------------------------------

4 김희수 391-9192 대전시 가오동 300-050 44

15 이석준 383-3939 성남시 분당구 내정동 4-5 99

 

(2) 뷰의 수정

뷰의 정의를 수정하려면 CREATE OR REPLACE 절을 사용합니다.

membervu102를 회원번호, 이름, 전화번호, 코드 컬럼으로 구성되게 수정합니다.

SQL> create or replace view membervu102

2 as select no, name, tel, code

3 from member

4 where code=102;

뷰가 생성되었습니다.

SQL> select * from membervu102;

NO_NUMBER MY_NAME ZIP_TEL S_CODE

--------- ---------- --------------- ---------

4 김희수 391-9192 102

5 이석준 383-3939 102

 

 

이름와 최소 점수, 최고 점수, 평균 점수로 구성된 뷰를 만들고 뷰의 구조와 내용을 출력.

SQL> create view member_jumsu

2 (name, min_jumsu, max_jumsu, avg_jumsu)

3 as select d.name, min(e.jumsu), max(e.jumsu), avg(e.jumsu)

4 from member e, circle d

5 where e.code=d.code

6 group by d.name;

뷰가 생성되었습니다.

SQL> desc member_jumsu

이름 Null? 유형

------------------------------- -------- ----

NAME VARCHAR2(10)

MIN_JUMSU NUMBER

MAX_JUMSU NUMBER

AVG_JUMSU NUMBER

SQL> select * from member_jumsu;

NAME MIN_JUMSU MAX_JUMSU AVG_JUMSU

---------- --------- --------- ---------

볼링부 80 80 80

수영부 82 97 91.4

요리부 48 91 76.333333

탁구부 70 81 73.666667

테니스부 44 99 71.5

 

 

 

(3) 뷰에 대한 DML문 사용

·다름 중 어느 것도 포함하지 않는다면 뷰에서 행을 삭제할 수 있다.

(조인 조건, 그룹 함수, GROUP BY 절, DISTINCT 명령, 식으로 정의된 column, 예를들면, SALARY*12)

·위에 열거한 것 중 어느 것도 포함하지 않고 뷰에서 선택하지 않은 NOT NULL

column이 base table에 있지 않으면 뷰를 통해 데이터를 추가할 수 있습니다.

 

종목별부서 번호 103에 대해 member 테이블의 모든 column을 갖는 뷰를 만듭니다. with check option 절을 추가한다.

SQL> create or replace view member103

2 as select * from member

3 where code=103

4 with check option constraint member103_ck;

뷰가 생성되었습니다.

 

 

뷰를 통해 회원 103의 종목별 부서번호를 104로 바꾼다.

SQL> update member103

2 set code=104

3 where no=2;

0 행이 갱신되었습니다.

 

 

※ 종목 부서 번호가 104로 바뀌면 뷰는 더 이상 해당 사원을 볼 수 없기 때문에 퍼스날 오라클에서는 "0 행이 갱신되었습니다."라고 발생하고 서버용 오라클에서는 "ERROR at line 3:ORA-01402: View WITH CHECK OPTION where-clause violation"라고 error가 발생하게됩니다. 따라서 WITH CHECK OPTION 절을 써서 뷰는 단지 종목 부서 103의 회원만을 볼 수 있고 이 회원의 부서 번호는 뷰를 통해서는 변경할 수 없게 합니다

 

EMPVU102 뷰를 수정한다. 이 뷰에서 DML 연산이 수행되지 않도록 read only 옵션을 줍니다.

SQL> create or replace view membervu102

2 (no_number, my_name, zip_tel, zip_addr, s_code)

3 as select no, name, tel, addr,code

4 from member

5 where code=102

6 with read only;

뷰가 생성되었습니다.

 

SQL> delete from membervu102

2 where no_number=15;

delete from membervu102

*

1행에 오류:

ORA-01732: Data menipulation operation not legal on this view

 

 

(4)뷰 삭제

뷰를 삭제하려면 DROP VIEW 명령을 쓰십시오. 이 명령은 데이터베이스에서 뷰의 정의를 삭제합니다. 뷰를 삭제하는 것은 뷰가 기반으로 하고 있는 테이블에 영향을 주지 않습니다.

drop view 뷰이름;

 

SQL> drop view membervu102;

뷰가 삭제되었습니다.

[Top]
No.
제목
작성자
작성일
조회
11341오라클 기본강좌(7)-synonym
정재익
2002-07-12
12940
11340오라클의 기본강좌(6)-사용자 및 권한관리
정재익
2002-07-12
14217
11339오라클 기본강좌(5)-인덱스
정재익
2002-07-12
10822
11338오라클 기본강좌(4)-VIEW 의 생성, 삭제
정재익
2002-07-12
10029
11337오라클 기본강좌(3)-시퀀스 생성, 수정, 삭제
정재익
2002-07-12
13547
11336오라클 기본강좌(3)-함수
정재익
2002-07-12
17009
11335오라클 기본강좌(2)-SELECT
정재익
2002-07-12
12468
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다