Database초보우낙

6. 컬럼값 자동증가 기능(12c 뉴피처) 본문

oracle 12c

6. 컬럼값 자동증가 기능(12c 뉴피처)

오운학 2024. 4. 26. 16:24


  데이터 입력값이 자동증가되는 기능은 오라클의 시퀀스를 이용하면 되는데
  시퀀스를 이용하지 않고 값을 증가 시킬 수 가 있습니다.


 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;