[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