본문 바로가기
DBMS/Oracle

[OBJECT] 뷰, 시퀀스

by 로햐 2021. 11. 15.

Ⅰ. OBJECT : 객체

ⅰ. 객체를 생성할 때는 CREATE OR REPLACE를 사용하는 것이 좋다. 관계가 끊어지지 않고 생성 가능하다.

 

1. 테이블

테이블이란?

정보를 튜플과 도메인을 이용하여 2차원으로 저장한 데이터베이스 객체. DB 데이터는 모두 테이블을 통해서 저장.

 


2. VIEW

2-1) VIEW의 특징

하나 이상의 쿼리문을 가지고 가상의 테이블을 만들어 원하는 쿼리문을 저장해둘 수 있는 객체. 

지금 이 VIEW가 어떤 쿼리문을 가지고 있는지 데이터 딕셔너리로 조회 가능하다.

SELECT * FROM USER_VIEWS;

VIEW를 가지고 DML이 불가능한 경우 : 어느 테이블에도 수정하려는 컬럼이 온전히 없는 경우 조작이 불가능하다.

JOIN, 그룹함수 등 조작이 가해진 경우 오라클은 해당 컬럼이 어느 테이블의 어떤 컬럼인지 확인할 수 없기 때문에 수정 불가능.


2-2) VIEW 생성

CREATE /*OR REPLACE*/ VIEW VIEWNAME
AS SUBQUERY;

주의사항 * 서브쿼리의 SELECT 함수나 산술 연산식이 기술되어있는 경우 반드시 별칭 지정


2-3) VIEW 작동방식

VIEW 옵션

OR REPLACE : 같은 이름이 존재하면 대체.

CREATE OR REPLACE VIEW VW_TEST
AS SUBQUERY;

FORCE/NOFORCE(기본값) : 서브쿼리에 기술된 테이블이 없어도 강제 생성/반드시 존재해야 뷰가 생성

INVALID 상태로 생성. 이 상태로는 동작하지 않고, 부족한 부분을 수정해야한다.

CREATE FORCE VIEW VW_TEST
AS SELECT FORCE, NOFORCE
   FROM DONOTCREATETABLE;
-- 경고 : 컴파일 오류와 함께 뷰가 생성되었습니다.

WITH CHECK OPTION : VIEW를 수정할 때 SUBQUERY의 조건절을 만족하는 값의 범위에서만 데이터 수정이 가능.

WITH READ ONLY : 조회만 가능. 읽기 전용

CREATE VIEW VIEWNAME
    AS SUBQUERY
    WITH CHECK OPTION
    WITH READ ONLY;

2-4) VIEW 수정

VIEW 오브젝트는 ALTER가 불가능하다. 따라서 두 가지 방법 중 택 1을 한다.

  • DROP 후 재생성
  • CREATE OR REPLACE VIEW

2-5) VIEW 삭제

DROP VIEW VIEWNAME;

3. SEQUENCE

3-1) SEQUENCE의 특징

순차적으로 정수 값을 자동으로 생성하는 객체. 초깃값, 공차로 자동으로 늘어나는 숫자를 만들 때 사용하면 좋다.

 

지금 이 SEQUENCE가 어떤 쿼리문을 가지고 있는지 데이터 딕셔너리로 조회 가능하다.

SELECT * FROM USER_SEQUENCES;

3-2) SEQUENCE 생성

 CREATE SEQUENCE SEQ_TEST
    START WITH     NUMBER          --초깃값
    INCREMENT BY   NUMBER          --공차
    MAXVALUE NUMBER  / NOMAXVALUE  --최대값 지정
    MINVALUE NUMBER  / NOMINVALUE  --최소값 지정
    CYCLE/NOCYCLE                  --값 순환 여부
    CACHE BYTESIZE/NOCACHE         --기본값은 20Byte
--모든 조건은 생략 가능

3-3) SEQUENCE 작동방식

 

시퀀스명.NEXTVAL : 시퀀스 한번 실행(맨 처음은 초깃값 생성)

시퀀스명.CURRVAL : 가장 마지막으로 성공한 NEXTVAL의 값

SELECT SEQ_TEST.CURRVAL FROM DUAL; 
SELECT SEQ_TEST.NEXTVAL FROM DUAL;

INSERT INTO STUDENT(ST_ID, ST_NAME)
     VALUES (SEQ_TEST.NEXTVAL, '가나다');--초깃값이 ST_ID에 대입


INSERT INTO STUDENT(ST_ID, ST_NAME)
     VALUES (SEQ_TEST.NEXTVAL, '마바사');--2항이 ST_ID에 대입

SEQUENCE를 사용할 수 있는 파트

  • SUBQUERY를 제외한 SELECT문
  • INSERT문의 SELECT
  • INSERT문의 VALUE
  • UPDATE문의 SET

SEQUENCE를 사용할 수 없는 파트

  • VIEW 의 SELECT 절
  • DISTINCT 키워드가 있는 SELECT 문
  • GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
  • SELECT , DELETE, UPDATE 의 서브 쿼리
  • CREATE TABLE, ALTER TABLE 명령의 DEFAULT

3-4) SEQUENCE 수정

ALTER SEQUENCE SEQ_TEST
    INCREMENT BY NUMBER
    MAXVALUE NUMBER / NOMAXVALUE
    MINVALUE NUMBER / NOMINVALUE
    CYCLE/NOCYCLE
    CACHE BYTESIZE/NOCACHE
--초깃값은 변경할 수 없다.

3-5) SEQUENCE 삭제

DROP SEQUENCE SEQ_EID;

VIEW는 access의 보고서 같은 개념인가?

프로시저, 트리거, 사용자 정의 함수, 제어문 커서 등은 다음에!

 

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

[데이터 딕셔너리]  (0) 2021.11.17
[DML, TCL] 데이터 조작과 반영  (0) 2021.11.14
[DDL, DCL] 객체의 구조 설정과 권한  (0) 2021.11.11
[SELECT] SUBQUERY  (0) 2021.11.11
[SELECT] JOIN과 집합연산자  (0) 2021.11.08