Database초보우낙
6. 컬럼값 자동증가 기능(12c 뉴피처) 본문
데이터 입력값이 자동증가되는 기능은 오라클의 시퀀스를 이용하면 되는데
시퀀스를 이용하지 않고 값을 증가 시킬 수 가 있습니다.
db 객체 5가지를 말씀해보세요 !
1. table
2. index
3. view
4. sequence : 번호를 자동으로 증가시켜서 생성하는 데이터 베이스 오브젝트
5. synonym
12c 는 시퀀스 없이 번호를 생성할 수 있는 컬럼을 생성할 수 있습니다. identity 컬럼입니다.
■ 실습:
create table test_01
( id_col1 number(10) generated always as identity primary key,
col2 varchar2(10),
col3 varchar2(10) );
insert into test_01(col2, col3) values('aaa', 'bbb');
insert into test_01(col2, col3) values('ccc', 'ddd');
insert into test_01(col2, col3) values('ffff', 'kkk');
insert into test_01(col2, col3) values('ggg', 'mmm');
insert into test_01(col2, col3) values('ttt', 'hhh');
문제1. test_01 테이블의 identity column에 최대값이 뭔지 확인하세요
select object_name, object_type
from user_objects
where object_name like 'IS%';
select ISEQ$$_77741.currval
from dual;
※ identity컬럼을 사용했을 때의 장점
1. 자동 번호 생성으로 고유한 값을 생성해주므로 데이터 입력할때 수동으로 숫자값을 입력하지 않아도 된다.
2. 이전에는 주로 시퀀스를 사용해서 위와 유사한 기능을 구현했지만, identity 컬럼은 이를 테이블에 정의하여 구현되므로 데이터베이스 엔진이 더 효율적으로 처리할 수 있도록 하므로 데이터 입력시 성능이 더 빠르다.
3. 간소화 된 모델링을 구현할 수 있습니다. 별도의 시퀀스를 생성하지 않아도 되므로 dba가 관리해야할 객체가 줄어든다.
문제1. dept테이블과 똑같은 구조의 테이블을 dept2로 생성하세요
create table dept2
as
select *
from dept
where 1=2;
문제2. dept2 테이블에 deptno컬럼이 자동으로 숫자값이 증가되게 하는 컬럼으로 지정되게 하세요
#1. 새로운 identity 컬럼을 추가
ALTER TABLE dept2
ADD new_deptno NUMBER GENERATED BY DEFAULT AS IDENTITY;
#2. 기존에 deptno를 drop 합니다
alter table dept2
drop column deptno;
#3. new_deptno를 deptno로 rename시킵니다
alter table dept2
rename column new_deptno to deptno;
문제3. salgrade 테이블과 똑같은 테이블을 salgrade2로 생성하는데 만들때부터 grade 컬럼을 identity 컬럼으로 생성하는데 데이터를 입력될 수 있게해서 grade컬럼의 값이 자동증가되게 하세요
#salgrade 테이블 생성 스크립트
drop table salgrade;
create table salgrade
( grade number(10),
losal number(10),
hisal number(10) );
insert into salgrade values(1,700,1200);
insert into salgrade values(2,1201,1400);
insert into salgrade values(3,1401,2000);
insert into salgrade values(4,2001,3000);
insert into salgrade values(5,3001,9999);
commit;
CREATE TABLE salgrade2 (
grade NUMBER GENERATED BY DEFAULT AS IDENTITY,
losal NUMBER(10),
hisal NUMBER(10)
);
INSERT INTO salgrade2 (losal, hisal)
SELECT losal, hisal FROM salgrade;
'oracle 12c' 카테고리의 다른 글
8.(12c 의 뉴피쳐 ) 오라클 heatmap 과 ADO (0) | 2024.04.30 |
---|---|
7.파티션중 하나의 파티션에만 인덱스 생성 가능 (0) | 2024.04.30 |
5. 페이징 처리가능 (12c 뉴피처) (1) | 2024.04.26 |
4. 같은 컬럼에 여러개의 인덱스를 생성할 수 있다(12c) (0) | 2024.04.26 |
3. 12c 버젼 이후부터 반드시 챙겨야하는 SQL튜닝 관련 파라미터 (1) | 2024.04.26 |