ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/DataBase

[SQL] μ‹œν€€μŠ€ Sequence

NaNaRinπŸ™ƒ 2021. 3. 16. 12:00

1. μ‹œν€€μŠ€ Sequence

- 였라클 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ νŠΉμ • κ·œμΉ™μ— λ§žλŠ” 연속 숫자λ₯Ό μƒμ„±ν•˜λŠ” 객체

- 번호λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ‚¬μš©μžμ—κ²Œ 계속 λ‹€μŒ 번호λ₯Ό λ§Œλ“€μ–΄ μ£ΌλŠ” μ—­ν• 

- 지속적이고 효율적인 번호 생성이 κ°€λŠ₯

 

2. μ‹œν€€μŠ€ 생성

- CREATE 문으둜 생성

CREATE SEQUENCE μ‹œν€€μŠ€ 이름		-- 1
[INCREMENT BY n]				-- 2
[START WITH n]  				-- 3
[MAXVALUE n | NOMAXVALUE]		-- 4
[MINVALUE n | NOMINVALUE]		-- 5
[CYCLE | NOCYCLE]				-- 6
[CACHE n | NOCACHE];			-- 7

  (1) 생성할 μ‹œν€€μŠ€ 이름 지정 (ν•„μˆ˜). (2)~(7)μ ˆμ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜μ„ 경우 1λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 1만큼 계속 μ¦κ°€ν•˜λŠ” μ‹œν€€μŠ€κ°€ 생성됨

  (2) μ‹œν€€μŠ€μ—μ„œ 생성할 번호의 증가 κ°’. default 1 (선택)

  (3) μ‹œν€€μŠ€μ—μ„œ 생성할 번호의 μ‹œμž‘ κ°’. default 1 (선택)

  (4) μ‹œν€€μŠ€μ—μ„œ 생성할 번호의 μ΅œλŒ“κ°’ 지정. μ΅œλŒ“κ°’μ€ μ‹œμž‘κ°’(START WITH n) 이상, μ΅œμ†Ÿκ°’(MINVALUE) 초과. NOMAXVALUE일 경우 μ˜€λ¦„μ°¨μˆœμ΄λ©΄ 10^23, λ‚΄λ¦Όμ°¨μˆœμ΄λ©΄ -1둜 μ„€μ • (선택)

  (5) μ‹œν€€μŠ€μ—μ„œ 생성할 번호의 μ΅œμ†Ÿκ°’ 지정. μ΅œμ†Ÿκ°’μ€ μ‹œμž‘κ°’(START WITH n) μ΄ν•˜, μ΅œλŒ“κ°’(MAXVALUE) 미만. NOMINVALUE일 경우 μ˜€λ¦„μ°¨μˆœμ΄λ©΄ 1, λ‚΄λ¦Όμ°¨μˆœμ΄λ©΄ 10^-26둜 μ„€μ • (선택)

  (6) μ‹œν€€μŠ€μ—μ„œ μƒμ„±ν•œ λ²ˆν˜Έκ°€ μ΅œλŒ“κ°’(MAXVALUE)에 λ„λ‹¬ν–ˆμ„ 경우 CYCLE이면 μ‹œμž‘κ°’(START WITH n)μ—μ„œ λ‹€μ‹œ μ‹œμž‘, NOCYCLE이면 번호 생성이 μ€‘λ‹¨λ˜κ³  μΆ”κ°€ 번호 생성 μš”μ²­μ‹œ 였λ₯˜ λ°œμƒ (선택)

  (7) μ‹œν€€μŠ€κ°€ 생성할 번호λ₯Ό λ©”λͺ¨λ¦¬μ— 미리 ν• λ‹Ήν•΄ 놓은 수λ₯Ό 지정. NOCACHEλŠ” 미리 μƒμ„±ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •. μ˜΅μ…˜μ„ λͺ¨λ‘ μƒλž΅ν•˜λ©΄ default 20 (선택)

-- 1.
CREATE SEQUENCE SEQ_DEPT_SEQUENCE
	INCREMENT BY 10
    START WITH 10
    MAXVALUE 90
    MINVALUE 0
    NOCYCLE
    CACHE 2;

  (1) 10λΆ€ν„° μ‹œμž‘ν•΄ 10μ”© μ¦κ°€ν•˜κ³  μ΅œμ†Ÿκ°’ 0 μ΅œλŒ“κ°’ 90이며 μ΅œλŒ“κ°’μ— λ„λ‹¬ν•˜λ©΄ 번호 생성이 μ€‘λ‹¨λ˜λŠ” μΊμ‹œ 2의 μ‹œν€€μŠ€. 90 이후 μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒ

 

3. μ‹œν€€μŠ€ μ‚¬μš©

- [μ‹œν€€μŠ€ 이름.CURRVAL] : μ‹œν€€μŠ€μ—μ„œ λ§ˆμ§€λ§‰μœΌλ‘œ μƒμ„±λœ 번호 λ°˜ν™˜. μ‹œν€€μŠ€ 생성 ν›„ λ°”λ‘œ μ‚¬μš©ν•˜λ©΄ 였λ₯˜ λ°œμƒ

- [μ‹œν€€μŠ€ 이름.NEXTVAL] : μ‹œν€€μŠ€μ˜ λ‹€μŒ 번호 λ°˜ν™˜

-- 1.
INSERT INTO DEPT_SEQUENCE (                   DEPTNO,      DNAME,     LOC)
				   VALUES (SEQ_DEPT_SEQUENCE.NEXTVAL, 'DATABASE', 'SEOUL');
                   
-- 2.
SELECT SEQ_DEPT_SEQUENCE.CURRVAL FROM DUAL;

  (1) μ‹œμž‘κ°’μ„ 10으둜 μ„€μ •ν•˜μ˜€μœΌλ―€λ‘œ DEPTNO에 10이 μ‚½μž…λ¨

  (2) λ°”λ‘œ 이전에 10을 μ‚¬μš©ν•˜μ˜€μœΌλ―€λ‘œ 10이 λ°˜ν™˜λ¨

 

3. μ‹œν€€μŠ€ μˆ˜μ •

- ALTER λͺ…λ Ήμ–΄λ‘œ μ‹œν€€μŠ€ μˆ˜μ •

- μ˜΅μ…˜μ„ μž¬μ„€μ •ν•˜λŠ” 데 μ‚¬μš©. START WITH 값은 변경이 λΆˆκ°€λŠ₯

ARTER SEQUENCE μ‹œν€€μŠ€ 이름		
[INCREMENT BY n]	
[MAXVALUE n | NOMAXVALUE]		
[MINVALUE n | NOMINVALUE]		
[CYCLE | NOCYCLE]				
[CACHE n | NOCACHE];			

-- 1.
ARTER SEQUENCE SEQ_DEPT_SEQUENCE
	INCREMENT BY 3
    MAXVALUE 99
    CYCLE;

  (1) μ΅œλŒ“κ°’μ„ 99둜, 증가값을 3으둜, NOCYCLE λŒ€μ‹  CYCLE μ˜΅μ…˜μœΌλ‘œ λ³€κ²½. 99 이후 μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ 0(MINVALUE)λΆ€ν„° λ‹€μ‹œ 3μ”© 증가

 

3. μ‹œν€€μŠ€ μ‚­μ œ

- DROP λͺ…λ Ήμ–΄λ‘œ μ‹œν€€μŠ€ μ‚­μ œ

- μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜λ”λΌλ„ μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€λœ λ°μ΄ν„°λŠ” μ‚­μ œλ˜μ§€ μ•ŠμŒ

DROP SEQUENCE μ‹œν€€μŠ€ 이름;

-- 1.
DROP SEQUENCE SEQ_DEPT_SEQUENCE;