[ex14~15] sequence, insert
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;