OBJECT - VIEW / SEQUENCE

ㅎㄱㅇ·2024년 1월 31일
0

DB공부

목록 보기
13/14

💖VIEW


✨VIEW

  • SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블
  • 실질적 데이터를 저장하고 있지는 않음
  • 사용자는 테이블을 사용하는 것과 동일하게 사용 가능
    DML(INSERT / UPDATE / DELETE)사용 가능
    → 생성된 뷰에 요청한 DML구문이 베이스 테이블도 변경

사용자 계정에 설정된 뷰 목록 조회

SELECT * FROM USER_VIEWS;
-- VIEW_NAME : 뷰 이름
-- TEXT      : 저장한 SELECT문

표현식

CREATE VIEW 뷰명
AS 서브쿼리;

👉 사용예1

CREATE VIEW VW_EMPLOYEE
AS SELECT
        E.EMP_ID [AS 사번],
        E.EMP_NAME [AS 이름],
        D.DEPT_TITLE [AS 부서명],
        E.SALARY [AS 급여], 
        N.NATIONAL_NAME [AS 국가명]
	FROM
        EMPLOYEE E
        JOIN DEPARTMENT D ON DEPT_ID = DEPT_CODE
        JOIN LOCATION L ON LOCAL_CODE = LOCATION_ID
        JOIN NATIONAL N ON L.NATIONAL_CODE = N.NATIONAL_CODE;

👉 사용예2

CREATE OR REPLACE VIEW V_EMP_JOB(사번, 이름, 직급, 성별, 근무년수)
AS SELECT EMP_ID,
		  EMP_NAME,
          JOB_NAME,
		  DECODE(SUBSTR(EMP_NO, 8, 1), 1, ‘남’, 2, ‘여’),
          EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
    FROM EMPLOYEE
    	 JOIN JOB USING(JOB_CODE);
  • 서브쿼리에 함수식이나 산술연산식을 사용하면 별칭 필수!
    (별칭 없으면 뷰 생성X)

VIEW 옵션

CREATE [OR REPLACE] [FORCE | NOFORCE]VIEW 뷰명
AS 서브쿼리;
[WITH CHECH OPTION]
[WITH READ ONLY]

✔️ OR REPLACE

  • 동일한 이름의 뷰가 있으면 해당 뷰에 저장된 SELECT문을 수정하고 없다면 새로 생성함

✔️ FORCE / NOFORCE

  • FORCE : 서브쿼리에 기술된 테이블이 존재하지 않더라도 뷰 생성
  • NOFORCE : 서브쿼리에 기술된 테이블이 존재해야지만 뷰 생성 (기본값)

✔️ WITH CHECK OPTION

  • 옵션을 설정한 컬럼의 값을 수정 불가능하게 함(삭제는 가능)
  • DML 사용 시 서브쿼리에 기술된 조건에 부합한 값으로 DML이 동작 되도록

✔️ WITH READ ONLY

  • 뷰에 대해 조회만 가능하고 삽입, 수정, 삭제 등은 불가능하게 함

🚩 DML명령어로 VIEW 조작이 불가능한 경우

  1. 뷰에 정의되어 있지 않은 컬럼을 조작하는 경우
  2. 뷰에 정의되어 있지 않은 컬럼 중 컬럼에 NOT NULL 제약조건이 지정된 경우
  3. 산술연산식이나 함수식을 사용하여 정의된 경우
  4. 그룹함수나 GROUP BY절을 포함한 경우
  5. DISTINCT 구문이 포함된 경우
  6. JOIN을 이용해 여러 테이블을 연결한 경우

대부분의 뷰는 조회 를 목적으로 이용함
DML은 되도록 사용하지 않는 것이 좋다.


인라인 뷰(INLINE-VIEW)

  • 일반적으로 FROM절에 사용된 서브쿼리의 결과 화면에 별칭을 붙인 것을 말함
  • FROM절에 서브쿼리를 직접 사용해도 되고 따로 뷰를 생성 후 FROM절에 생성한 뷰를 사용해도 됨



💖SEQUENCE


✨SEQUENCE

순차적으로 정수 값을 자동으로 생성하는 객체
사용자 계정에 설정된 뷰 목록 조회

SELECT * FROM USER_SEQUENCES;

표현식

CREATE SEQUENCE 시퀀스명;

SEQUENCE 옵션

CREATE SEQUENCE 시퀀스명;
	   [START WITH 숫자]
       [INCREMENT BY 숫자]
       [MAXVALUE 숫자 | NOMAXVALUE]
       [MINVALUE 숫자 | NOMINVALUE]
       [CYCLE | NOCYCLE]
       [NOCACHE | CACHE 바이트크기]

✔️ START WITH 숫자

  • 처음 발생시킬 시작값 지정 (기본값 : 1)

✔️ INCREMENT BY 숫자

  • 얼마씩 증가시킬지에 대한 값 (기본값 : 1)

✔️ MAXVALUE

  • 최대값, 10의 27승-1까지 가능 (기본값 : 9999999999...)

✔️ MINVALUE

  • 최소값, -10의 26승까지 가능 (기본값 : 1)

✔️ CYCLE

  • 값 순환
  • 시퀀스가 최대값까지 증가 완료 시
    CYCLE은 START WITH 설정 값으로 돌아감
  • 기본값 : NOCYCLE

✔️ CACHE 바이트크기

  • 캐시 메모리 할당
  • 기본값 : CACHE 20



✨시퀀스 사용

NEXTVAL / CURRVAL

👉 NEXTVAL

  • 현재 시퀀스 값 (마지막으로 성공한 ENXTVAL의 수행한 값)
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;

👉 CURRVAL

  • 시퀀스 값에 일정 값을 증가시켜 발생한 값
    → 현재 시퀀스 값 + (INCREMENT BY 값)
  • NEXTVAL 사용 전에 CURRVAL 사용하면 오류 발생
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;

사용예

-- 데이터 추가 시 시퀀스 사용 ( NEXTVAL)
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, HIRE_DATE)
VALUES(SEQ_EID.NEXTVAL, '홍길동','111111-1111111','J3', SYSDATE);

INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, HIRE_DATE)
VALUES(SEQ_EID.NEXTVAL, '홍길순','111111-1111111','J3', SYSDATE);


🚩 NEXTVAL / CURRVAL 사용 가능 여부

⭕ 사용 가능

  • 서브쿼리가 아닌 SELECT문
  • INSERT문의 SELECT절
  • INSERT문의 VALUE절
  • UPDATE문의 SET절

❌ 사용불가

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

시퀀스 수정

ALTER SEQUENCE SEQ_EMPID
INCREMENT BY 10
MAXVALUE 400
NOCYCLE
NOCACHE;

START WITH 값은 변경 불가능

0개의 댓글