개발자 미니민의 개발스터디

[Oracle] 오라클 - 뷰(VIEW) 및 시퀀스 / 시노님

by mini_min
[Oracle]
오라클 - 뷰(VIEW) 및 시퀀스 / 시노님

✔️ 뷰란?

: 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블
또는 뷰를 기반으로 만들어진 가상 테이블이다. 

: 테이터를 가지고 있지 않고, 쿼리만 가지고 있다.

: 관리가 용이하고 명령문이 간단하다.

: 뷰를 통해 데이터에 접근함으로써 뷰에 나타나지 않는 데이터를 안전하게 보호가능하다.

 

: 단순 뷰가 아닌 경우, 삽입, 수정, 삭제를 할 수 없다.

: 뷰의 컬럼이 테이블의 컬럼이 아닌, 상수, 계산식, 그룹함수로 만들어졌으면 그 뷰는 변경 불가

: DISTINCT , GROUP BY, HAVING 을 사용해 만들어진 뷰는 변경 불가

: 변경 못하는 뷰를 토대로 생성된 뷰는 변경 불가

 

💡

: 뷰를 만들수 있는 권한이 있어야 뷰를 만들 수 있다. (CREATE VIEW) 

: 수식이 있을 경우, 별명을 줘야한다.

GRANT CREATE VIEW TO sky;

 

 

-- 예시

CREATE VIEW panmai
AS
SELECT b.bCode, bName, bPrice, b.pNum, pName, sDate, s.cNum, cName, qty
FROM book b
JOIN pub p ON b.pNum = p.pNum
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum
JOIN cus c ON c.cNum = s.cNum;
SELECT * FROM panmai;

-- 뷰 확인

SELECT * FROM col WHERE tname='PANMAI';

 

 

-- 뷰 수정

: CREATE 에 OR REPLACE를 붙이면 : 없으면 만들고, 있으면 수정할 수 있다.

CREATE OR REPLACE VIEW panmai
AS

 

 

 

✔️ 뷰의 좋은 점

= 조인하지 않아도 뷰로 쉽게 원하는 결과를 출력할 수 있다.

SELECT bCode, bName, SUM(amt)
FROM panmai
GROUP BY bCode, bName;

 

 

 

✔️ 복합 뷰 만들기 (JOIN)

조인이 들어가는 복합 뷰를 만들 수 있다.

이때, 복합 뷰는 추가, 삭제 등이 불가하다. (단순뷰는 추가, 수정등이 가능하다.)

-- 예시

CREATE VIEW testView1
AS
SELECT t1.id, num, name, score, memo
FROM test t1
JOIN test2 t2 ON t1.id = t2.id;

 

-- 뷰 삭제하기

: 뷰는 쿼리라서 휴지통에 들어가지 않는다.

DROP VIEW testView1;
DROP TABLE test1 CASCADE CONSTRAINTS PURGE;
-- 자식테이블이 존재해도 관계를 제거하고 삭제

 

 

 

✔️ 시퀀스(sequence)

: 유일한 정수값을 연속적으로 생성시키기 위해 사용하는 객체 EX) 게시판 번호 등...

-- 연속적인 유일의 정수값 생성(1, 2, 3, ...)

-- 시퀀스 값을 기본키의 값으로 사용 할 수 있다.

-- 트랜잭션의 커밋 또는 롤백과 상관없이 시퀀스는 증가한다.

-- 12C 이상부터는 테이블 생성시 DEFAULT 값으로 시퀀스 값을 할당 할 수 있다.

 

-- 시퀀스 목록 확인

SELECT * FROM seq;

 

-- 시퀀스 값 가져오기

시퀀스이름.NEXTVAL : 다음 시퀀스 값
시퀀스이름.CURRVAL : 현재 시퀀스 값

 

 

 

🔒 문제

-- 1부터 1씩 증가하는 시퀀스 만들기

CREATE SEQUENCE test_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;

 

 

-- 동일한 SELECT, INSERT 에서 NEXTVAL 을 여러번 사용해도 동일한 값이 출력되거나 추가됨

SELECT test_seq.NEXTVAL, test_seq.NEXTVAL, test_seq.NEXTVAL FROM dual; --4,4,4

 

 

-- 시퀀스 삭제

DROP SEQUENCE test_seq;

 

 

 

🔒 문제

-- 시퀀스 이용하기

CREATE TABLE guest(
num NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
content VARCHAR2(4000) NOT NULL,
reg_date DATE DEFAULT SYSDATE
);
CREATE SEQUENCE guest_seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
INSERT INTO guest(num, name, content, reg_date)
VALUES (guest_seq.NEXTVAL, '홍길동', '잘보고갑니다', SYSDATE);
INSERT INTO guest(num, name, content, reg_date)
VALUES (guest_seq.NEXTVAL, '너자바', '홈페이지 좀 고치삼', SYSDATE);
INSERT INTO guest(num, name, content, reg_date)
VALUES (guest_seq.NEXTVAL, '다자바', '볼게 없음', SYSDATE);
SELECT * FROM guest;
💡 롤백을 하더라도, 지나간 시퀀스는 다시 돌아오지 않는다!!

 

 

-- 10~20 까지 2씩 증가하는 시퀀스. 캐시 5개. 20 넘으면 오류

CREATE SEQUENCE test_seq
INCREMENT BY 2
START WITH 10
MINVALUE 10
MAXVALUE 20
CACHE 5;
DROP SEQUENCE test_seq;

 

 

-- 10부터 시작하여 20까지 3씩 증가하는 시퀀스. 캐시 5개. 최소값 1 , 최대값 도달하면 처음부터

CREATE SEQUENCE test_seq
INCREMENT BY 3
START WITH 10
MINVALUE 1
MAXVALUE 20
CYCLE
CACHE 5;

 

 

 

✔️ 시노님 (synonym)

: 객체, 테이블에 주는 별명/이름을 말한다.

: 관리자 계정으로 생성 권한을 줘야함.

GRANT CREATE SYNONYM TO sky;
CREATE SYNONYM jobs FOR hr.jobs;
SELECT * FROM jobs;
-- 시노님 목록 확인
SELECT * FROM syn;

 

 

 

 

 

 

 

블로그의 프로필 사진

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기