๋Œ€์žฅ์ฟต์•ผ 2023. 3. 19. 18:09

ex14_sequence

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด
    1. ํ…Œ์ด๋ธ”(์ปฌ๋Ÿผ)
    2. ๊ณ„์ •(hr)
    3. ์ œ์•ฝ์‚ฌํ•ญ
    4. ์‹œํ€€์Šค
    
    
    ์‹œํ€€์Šค, Sequence
    - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜
    - ์˜ค๋ผํด ์ „์šฉ ๊ฐ์ฒด(๋‹ค๋ฅธ DBMS์—๋Š” ์—†์Œ)
    - ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด(**********************)
    - (์ฃผ๋กœ) ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“œ๋Š” ์šฉ๋„๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. > PK ์ปฌ๋Ÿผ์— ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์„ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
    
    
    ์‹œํ€€์Šค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ
    - create sequence ์‹œํ€€์Šค๋ช… [์˜ต์…˜];
    
    ์‹œํ€€์Šค ๊ฐ์ฒด ์‚ญ์ œํ•˜๊ธฐ
    - drop sequence ์‹œํ€€์Šค๋ช…;
    
    ์‹œํ€€์Šค ๊ฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ   
    - ์‹œํ€€์Šค๋ช….nextVal > ์ฃผ๋กœ ์‚ฌ์šฉ
    - ์‹œํ€€์Šค๋ช….currVal > ๊ฐ€๋” ์‚ฌ์šฉ

create sequence seqNum;
drop sequence seqNum;

select seqNum.nextVal from dual; -- 10 > 11 > 12 (์•„๋ž˜์™€๋Š” ๋ณ„๊ฐœ๋กœ ๋…๋ฆฝ์ . ์„œ๋กœ ์˜ํ–ฅX)


create sequence seqTest;
drop sequence seqTest;

select seqTest.nextVal from dual; --5 > 6 > 7 (์ž„์‹œ๊ฐ’X. ์˜ค๋ผํด ์ข…๋ฃŒํ•ด๋„ ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋จ)

 

- ๋ฉ”๋ชจ ๋ฒˆํ˜ธ ์‹œํ€€์Šค ๊ฐ์ฒด

drop table tblMemo;

create table tblMemo (
    
    seq number(3) primary key, 
    name varchar2(50),
    memo varchar2(1000),
    regdate date
    
);

-- ๋ฉ”๋ชจ ๋ฒˆํ˜ธ ์‹œํ€€์Šค ๊ฐ์ฒด
create sequence seqMemo start with 16;
drop sequence seqMemo;

insert into tblMemo (seq, name, memo, regdate) 
    values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.' || seqMemo.nextVal, sysdate);

select * from tblMemo;

select max(seq) from tblMemo;



-- currVal > ์‹œํ€€์Šค๊ฐ์ฒด๊ฐ€ ๋งˆ์ง€๋ง‰์— ๋งŒ๋“  ์ˆซ์ž๋ฅผ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ > ํ,์Šคํƒ์—์„œ์˜ peek() ์—ญํ• 
-- > ๋กœ๊ทธ์ธ์„ ํ•œ ๋’ค(์ ‘์†) ์ตœ์†Œ 1ํšŒ ์ด์ƒ nextVal๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‚œ ๋’ค์—๋งŒ currVal์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
select seqMemo.currVal from dual; --10



-- ์ผ๋ จ๋ฒˆํ˜ธ > ์ˆซ์ž๋กœ๋งŒ X
-- ์‡ผํ•‘๋ชฐ ์ƒํ’ˆ๋ฒˆํ˜ธ > ABC10010

select seqNum.nextVal from dual; -- 13 > ABC0013

select 'ABC' || seqNum.nextVal from dual; -- ABC14

select 'ABC' || to_char(seqNum.nextVal, '0000') from dual; -- ABC 0015

select 'ABC' || ltrim(to_char(seqNum.nextVal, '0000')) from dual; -- ABC0016

์‹œํ€€์Šค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ
    
    create sequence ์‹œํ€€์Šค๋ช…;
    
    create sequence ์‹œํ€€์Šค๋ช… 
                    increment by n   --์ฆ๊ฐ์น˜(**)
                    start with n         --์‹œ์ž‘๊ฐ’(**)
                    maxvalue n        --์ตœ๋Œ“๊ฐ’
                    minvalue n         --์ตœ์†Œ๊ฐ’
                    cycle                  --๋ฃจํ”„
                    cache n              --์บ์‹œ

 

drop sequence seqNum;

create sequence seqNum
                start with 200;

create sequence seqNum
                increment by 100;

-- ์ฆ๊ฐ์น˜ ์Œ์ˆ˜๋„ ๊ฐ€๋Šฅ
create sequence seqNum
                increment by -1;

create sequence seqNum
                start with 100
                increment by -1
                maxvalue 100;

--maxvalue ์ดˆ๊ณผํ•˜๋ฉด ์—๋Ÿฌ
create sequence seqNum
                maxvalue 10;

create sequence seqNum
                increment by -1
                minvalue -10;



drop sequence seqNum;

--cycle ๋ฃจํ”„
create sequence seqNum
                increment by 1
                start with 1
                maxvalue 10
                cycle
                cache 20;



select seqNum.nextVal from dual;


-- ๋ฉ”๋ชจ๋ฒˆํ˜ธ > ์—ญํ•  > 1๋‹ค์Œ 2์–ด์•ผ๋งŒ ํ•˜๋Š”๊ฐ€? (X) > ์œ ์ผํ•œ ์‹๋ณ„์ž!!!
-- 1, 2, 3, 4, 5 > 21

-- ๋ฒ„๊ทธ > ๊ฐ€๋”์”ฉ ์บ์‹œ ๋‚ ๋ผ๊ฐ
-- ๊ฒŒ์‹œํŒ ๊ธ€์“ฐ๊ธฐ > ๋งˆ์ง€๋ง‰ 15๋ฒˆ > 21๋ฒˆ

-- ๊ตฌ๋ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฒˆํ˜ธ์ผ ๋•Œ(์ด๋ ‡๊ฒŒ๊นŒ์ง€ ํ•ด์•ผ๋  ๊ฒฝ์šฐ ๊ฑฐ์˜ ์—†์Œ) > start with
drop sequence seqMemo;
create sequence seqMemo start with 16;

ex15_insert

 

 insert
    - DML
    - ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด(ํ–‰ ์ถ”๊ฐ€)
    
    ๊ตฌ๋ฌธ
    - insert into ํ…Œ์ด๋ธ” (์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ) values (๊ฐ’๋ฆฌ์ŠคํŠธ);

 

drop table tblMemo;
create table tblMemo (
    
    seq number(3) primary key, 
    name varchar2(50),
    memo varchar2(1000) not null,
    regdate date default sysdate
    
);

drop sequence seqMemo;
create sequence seqMemo;



-- 1. ํ‘œ์ค€ (๊ถŒ์žฅ)
-- : ์›๋ณธ ํ…Œ์ด๋ธ”์— ์ •์˜๋œ ์ปฌ๋Ÿผ ์ˆœ์„œ์™€ ๊ฐœ์ˆ˜๋Œ€๋กœ ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  (a)
--   ๊ฐ’๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• (b)
insert into tblMemo (seq, name, memo, regdate) -- a
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate); -- b

-- 2. ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋Š” ์›๋ณธ ํ…Œ์ด๋ธ”๊ณผ ์ƒ๊ด€์—†๋‹ค.
-- : ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ์™€ ๊ฐ’๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.(***)
insert into tblMemo (name, memo, regdate, seq)
            values ('ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate, seqMemo.nextVal);

insert into tblMemo (memo, regdate, seq, name)
            values ('ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate, seqMemo.nextVal); --์—๋Ÿฌ

insert into tblMemo (memo, name, regdate, seq)
            values ('ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate, seqMemo.nextVal); --๊ฐ’ ๊ผฌ์ž„


-- 3. ORA-00947: not enough values
-- : ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ์˜ ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜์™€ ๊ฐ’๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’ ๊ฐœ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.
insert into tblMemo (seq, name, memo, regdate) --4๊ฐœ
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', sysdate); --3๊ฐœ

-- 4. ORA-00913: too many values
-- : ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ์˜ ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜์™€ ๊ฐ’๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’ ๊ฐœ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.
insert into tblMemo (seq, name, regdate) --3๊ฐœ
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate); --4๊ฐœ

-- 5. null ์กฐ์ž‘ > name์„ ์•ˆ๋„ฃ๊ณ  ์‹ถ๋‹ค. > null ๋Œ€์ž…
-- 5.1 null ์ƒ์ˆ˜ ์‚ฌ์šฉ > ๋ช…์‹œ์ 
insert into tblMemo (seq, name, memo, regdate)
            values (seqMemo.nextVal, null, '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate);

-- 5.2 ์ปฌ๋Ÿผ ์ƒ๋žต > ์•”์‹œ์  (์ปฌ๋Ÿผ&๊ฐ’ ์ƒ๋žต)
insert into tblMemo (seq, memo, regdate)
            values (seqMemo.nextVal, '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate);

-- 6. default ์กฐ์ž‘
-- 6.1 default ์ƒ์ˆ˜ ์‚ฌ์šฉ
insert into tblMemo (seq, name, memo, regdate)
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', default);

--6.2 ์ปฌ๋Ÿผ ์ƒ๋žต > null ๋Œ€์ž… > default ๋™์ž‘
insert into tblMemo (seq, name, memo)
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.');

-- 6.3 null ์ƒ์ˆ˜ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์˜์‚ฌ๋ฅผ ์šฐ์„ ํ•ด์„œ default ๋™์ž‘X
insert into tblMemo (seq, name, memo, regdate)
            values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', null);


-- 7. ๋‹จ์ถ• ํ‘œํ˜„
-- : ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. > ์›๋ณธ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆœ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์‹คํ–‰. ์ˆœ์„œ ๋ฐ”๊พธ๋ฉดX. ์ƒ๋žตX
insert into tblMemo values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate);

-- : ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ฐ’๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. > ์ˆœ์„œ ์ž˜ ์ƒ๊ฐ ์•ˆ๋‚จ;

-- : null ์กฐ์ž‘
insert into tblMemo values (seqMemo.nextVal, null, '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate);
insert into tblMemo values (seqMemo.nextVal, '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', sysdate); -- ๊ฐ’๋ฆฌ์ŠคํŠธ๋งŒ ์ƒ๋žตํ•ด์„œX

-- : default ์กฐ์ž‘
insert into tblMemo values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.', default); --O
insert into tblMemo values (seqMemo.nextVal, 'ํ™๊ธธ๋™', '๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.'); --X



-- 8. tblMemo ํ…Œ์ด๋ธ” > (๋ณต์‚ฌ) > tblMemoCopy ํ…Œ์ด๋ธ”
create table tblMemoCopy (
    
    seq number(3) primary key, 
    name varchar2(50),
    memo varchar2(1000) not null,
    regdate date default sysdate
    
);

insert into tblMemoCopy select * from tblMemo; -- 9๊ฐœ ํ–‰ ์ด(๊ฐ€) ์‚ฝ์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

drop table tblMemoCopy;


-- 9. tblMemo ํ…Œ์ด๋ธ” > (๋ณต์‚ฌ) > tblMemoCopy ํ…Œ์ด๋ธ” > ์‹ค์‚ฌ์šฉX, ํ…Œ์ŠคํŠธO 
-- : ํ…Œ์ด๋ธ” ์ƒ์„ฑ + ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
-- : ***** ์ปฌ๋Ÿผ ๊ตฌ์กฐ๋Š” ๋ณต์‚ฌ๊ฐ€ ๋˜๋Š”๋ฐ, ์ œ์•ฝ ์‚ฌํ•ญ์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.
-- : ๊ฐœ๋ฐœ์šฉ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰์˜ ๋”๋ฏธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
create table tblMemoCopy as select * from tblMemo; -- Table TBLMEMOCOPY์ด(๊ฐ€) ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.



select * from tblMemo;
select * from tblMemoCopy;