IT/Oracle

오라클 - SEQUENCE(시퀀스), SYNONYM(시노님)

노마드오브 2018. 8. 18. 11:30

-- SEQUENCE(시퀀스) 생성 

create sequence jno_seq

increment by 1

start with 100

maxvalue 110

minvalue 90

cycle

cache 2;


-- SEQUENCE 생성 및 각종 옵션 테스트

create table s_order

(ord_no number(4),

ord_name varchar2(10),

p_name varchar2(20),

p_qty number);


insert into s_order 

values (jno_seq.NEXTVAL, 'James', 'apple', 5);

insert into s_order 

values (jno_seq.NEXTVAL, 'Ford', 'berry', 3);


select * from s_order;


select jno_seq.currval from dual;


-- 아래 pl/sql을 실행하면 sequence를 110까지 사용하게 된다.

begin

    for i in 1..9 loop

        insert into s_order values (jno_seq.nextval, 'Allen', 'Banana', 5);

    end loop;

    commit;

end;

/        


select * from s_order;


-- sequence가 90부터 다시 시작된다

insert into s_order values (jno_seq.NEXTVAL, 'SMITH', 'Grape', 3);


-- 값이 감소하는 sequence 생성 및 사용하기

create sequence jno_seq_rev

increment by -2

minvalue 0 

maxvalue 20

start with 10;


create table s_rev1 (no number);


insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 10

insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 8

insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 6

insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 4

insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 2

insert into s_rev1 values (jno_seq_rev.nextval); -- sequenct 값 0

insert into s_rev1 values (jno_seq_rev.nextval); -- min value 값까지 내려와서 그 이하로는 오류 발생


-- sequence 조회 및 수정

select sequence_name, min_value, max_value, increment_by, cycle_flag, order_flag, cache_size, last_number

from user_sequences

where sequence_name='JNO_SEQ';


alter sequence jno_seq

maxvalue 120

cache 10;


-- sequence 삭제

drop sequence jno_seq;


-- synonym (시노님 - 동의어)

-- sysdba 권한으로 접속하여 scott에게 시노님 생성 권한을 줘야 scott가 시노님을 생성할 수 있다.

-- conn / as sysdba

-- grant create synonym to scott;

-- grant create public synonym to scott;

-- conn scott/tiger -- scott 계정으로 다시 접속하기

create synonym e for emp;

create public synonym d2 for dept;


-- synonym 조회하기

select synonym_name, table_owner, table_name

from user_synonyms

where table_name = 'EMP';


-- public synonym을 조회하려면, dba 권한으로 로그인해야 보임

-- conn / as sysdba

select synonym_name, table_owner, table_name 

from dba_synonyms 

where table_name = 'DEPT';


-- synonym 삭제

drop synonym e;