2020. 5. 11. 18:12ㆍDB
오라클의 DB객체
1. 종류
1) Table
2) View
3) Sequence
4) Index
5) Synontm
6) procedure
7) trigger
2. View
-> 논리적인 가상의 테이블
-> 실제 존재하지는 않지만 마치 테이블처럼 사용
-> 테이블이나 다른 뷰로부터 생성
-> 자주 사용하는 select 구문을 하나의 이름으로 묶어주고 사용하는 것
1) 사용 목적
=> 속도: View나 procedure는 한번 호출하면 메인 메모리에 남아있게 되어서 다음에 호출할 때 속도가 빠름
=> 보안: USER에게 user가 필요한 데이터만 골라줄 수 있어서 보안기능이 강화될 수 있음
2) 생성
create [or replace] view 뷰이름
as
select 구문
[with check option[
[with read only]
- view는 구조 변경이 안되서 alter view가 없음
- 구조를 변경할 때는 or replace를 이용
- view는 가상의 테이블이지만 dml작업이 가능함.
view에 데이터를 삽입하면 원본 테이블에 데이터가 삽입됨
- dml(insert, update, delete) 작업을 못하도록 할 때 with read only를 추가
- with check option은 view에 존재하는 데이터만 dml 작업을 할 수 있도록 하기 위한 옵션
3. Sequence
- 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.
- 보통 PRIMARY KEY 값을 생성하기 위해 사용 한다.
- 메모리에 Cache되었을 때 시퀀스값의 액세스 효율이 증가 한다.
- 시퀀스는 테이블과는 독립적으로 저장되고 생성된다.
2) 사용
시퀀스이름.nextval: 다음 시퀀스 값 가져오기
시권스이름.currval: 현재 시퀀스 값 가져오기
-> 생성하고 한번은 nextval을 호출해야 currval을 사용 가능
3) 변경
alter sequence 시퀀스 이름
옵션 설정
-> start with는 수정할 수 없음
-> start with를 변경할 때는 삭제하고 다시 생성
4) 삭제
drop sequence 시퀀스이름;
4. Index
- 데이터를 빠르게 찾을수 있도록 설정한 포인터
1) 장점
-> 검색속도가 향상
2) 단점
-> 추가적인 공간이 필요
-> 삽입이나 삭제가 빈번히 발생하면 속도가 느려짐.(DML작업이 무거워진다)
3) 오라클의 경우는 B* 트리 이용
4) primary key와 unique에는 별도의 지정이 없어도 자동으로 인덱스를 설정
5) 인덱스 생성
create index 인덱스 이름
on 테이블이름(컬럼이름 나열);
=> 하나의 컬럼으로 만들 수 있지만 여러 개의 컬럼을 이용해서도 생성 가능
=> 하나의 컬럼으로 구성된 인덱스를 단일 인덱스라고 하고 여러 개의 컬럼으로 구성된 인덱스를
복합 인덱스라고 한다.
=> 인덱스는 계산식에도 생성이 가능함.
6) 인덱스 제거
drop index 인덱스이름;
7) 인덱스를 생성해야 하는 이유
- 기본키나 unique속성이 아닌데 검색에 자주 이용하는 컬럼에 생성
- 게시판의 경우 주로 검색은 글번호가 아닌 제목이나 내용
5. Synonym
- 데이터베이스 객체에 별명을 붙이는 것
1. 생성
create synonym 별명
for 원본이름;
2. 삭제
drop synonym 별명;
3. 사용
- 디비 연동하는 프로그램을 만들 때 synonym을 이용하면 유지보수에 유리
6. Procedure
- 프로그래밍 언어의 함수처럼 자주 사용하는 sql을 하나의 이름으로 묶어둔 것.
- 오라클에서 procedure 만드는 문법을 pq/sql이라고 함.
ms-sql server에서 procedure만드는 문법을 t-sql이라고 함.
- 보안에 좋음
1. 생성
create [or replace] procedure 프로시저 이름
(변수 자료형....)
is
begin
sql문장
end;
/
=> dbeaver에서는 / 제외
2. 실행
- dbeaver에서 실행
begin
프로시저이름(매개변수)
end;
-> sqlplus의 경우
execute 프로시저이름 (매개변수)
3. 삭제
drop procedure 프로시저이름;
4. 실습
Dept 테이블에 데이터를 삽입
insert into dept(deptno, dname, loc)
values(11, '영업', '춘천');
2) 프로시저 이용
create or replace procedure dept_insert
(vdeptno in dept.deptno%type,
vdname in dept.dname%type,
vloc in dept.loc%type)
is
begin
insert into dept(deptno, dname, loc)
values(vdeptno, vdname, vloc);
end;
/
begin
dept_insert(12,'기획','대전');
end;
프로시저 사용 이유
- 보안: 유저는 테이블의 구조를 알 필요가 없음.
- 속도: 일반 sql은 실행할 때마다 보조기억장치에서 불어와야 하지만 프로시저와
뷰는 호출하면 메모리에 적재된 상태로 존재
create trigger 트리거이름
[before | after] [insert | delete | update - or로 묶어서 여러개 사용 가능]
on 테이블이름
for each row
begin
수행할 내용;
end;
/
- insert할 때는 :new 그리고 삭제할 때는 :old. :new와 :old를 이용해서
새로 추가되는 데이터나 삭제되는 데이터를 이용할 수 있음.