λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

였라클 μ‹œν€€μŠ€(Sequence) μ‚¬μš©λ²• 총정리 (생성, 쑰회, μˆ˜μ •, μ‚­μ œ)λ“±

by 5566 2023. 10. 26.

1. μ‹œν€€μŠ€(Sequence) μ†Œκ°œ

μ‹œν€€μŠ€(Sequence)λŠ” 였라클 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μžλ™ 번호 생성을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. μ‹œν€€μŠ€λŠ” κ³ μœ ν•œ 숫자 값을 μƒμ„±ν•˜λ©°, 일반적으둜 ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€ κ°’μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. μ‹œν€€μŠ€λŠ” λ°μ΄ν„°μ˜ 일련번호λ₯Ό μ‰½κ²Œ μƒμ„±ν•˜κ³  관리할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

μ‹œν€€μŠ€λŠ” μžλ™μœΌλ‘œ μ¦κ°€ν•˜λŠ” κ°’μœΌλ‘œ μ‚¬μš©λ˜λ©°, 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ μˆœμ„œλ₯Ό μœ μ§€ν•˜κ³  쀑볡을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹œν€€μŠ€λŠ” 주둜 ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€, μ™Έλž˜ ν‚€ λ˜λŠ” λ‹€λ₯Έ 컬럼의 κΈ°λ³Έκ°’μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

μ‹œν€€μŠ€λŠ” 였라클 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ†μ‰½κ²Œ μƒμ„±ν•˜κ³  관리할 수 있으며, 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 일관성과 정확성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ μ‹œν€€μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

2. μ‹œν€€μŠ€ μƒμ„±ν•˜κΈ°

μ‹œν€€μŠ€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” CREATE SEQUENCE 문을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€ 생성 μ‹œ 지정할 수 μžˆλŠ” λ§Žμ€ μ˜΅μ…˜μ΄ μžˆμ§€λ§Œ, κ°€μž₯ 기본적인 μ˜΅μ…˜λ§Œμ„ μ‚¬μš©ν•˜μ—¬ 예제λ₯Ό μ„€λͺ…ν•˜κ³ μž ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” μ‹œν€€μŠ€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 기본적인 λ¬Έλ²•μž…λ‹ˆλ‹€.

CREATE SEQUENCE sequence_name
  START WITH initial_value
  INCREMENT BY increment_value
  [ MINVALUE { value | NOMINVALUE } ]
  [ MAXVALUE { value | NOMAXVALUE } ]
  [ CYCLE | NOCYCLE ]
  [ CACHE { value | NOCACHE } ];
  • sequence_name : 생성할 μ‹œν€€μŠ€μ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€.
  • initial_value : μ‹œν€€μŠ€κ°€ μ‹œμž‘λ  κ°’μž…λ‹ˆλ‹€.
  • increment_value : μ‹œν€€μŠ€κ°€ 증가할 κ°’μž…λ‹ˆλ‹€.
  • MINVALUE : μ‹œν€€μŠ€μ˜ μ΅œμ†Œκ°’μ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • MAXVALUE : μ‹œν€€μŠ€μ˜ μ΅œλŒ€κ°’μ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • CYCLE : μ‹œν€€μŠ€κ°€ μ΅œλŒ€κ°’μ— λ„λ‹¬ν•˜λ©΄ λ‹€μ‹œ μ΅œμ†Œκ°’λΆ€ν„° μ‹œμž‘ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • CACHE : μ‹œν€€μŠ€ 값을 μΊμ‹œν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬μ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ‹œμž‘ 값이 1이고, 1μ”© μ¦κ°€ν•˜λŠ” μ‹œν€€μŠ€λ₯Ό μƒμ„±ν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CREATE SEQUENCE my_sequence
  START WITH 1
  INCREMENT BY 1;

μ΄λ ‡κ²Œ μ‹œν€€μŠ€λ₯Ό μƒμ„±ν•˜λ©΄ my_sequenceλΌλŠ” μ΄λ¦„μ˜ μ‹œν€€μŠ€κ°€ μƒμ„±λ˜κ³ , ν•΄λ‹Ή μ‹œν€€μŠ€λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μˆ˜μ •, μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ μ‹œν€€μŠ€λ₯Ό μ‘°νšŒν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. μ‹œν€€μŠ€ μ‘°νšŒν•˜κΈ°

μƒμ„±ν•œ μ‹œν€€μŠ€λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 SQL문을 μ‚¬μš©ν•©λ‹ˆλ‹€.

SELECT sequence_name, min_value, max_value, increment_by, last_number,
       cache_size, cycle_flag
FROM user_sequences
WHERE sequence_name = 'my_sequence';

μœ„μ˜ SQL문은 user_sequencesλΌλŠ” μ‹œμŠ€ν…œ λ·°λ₯Ό μ΄μš©ν•˜μ—¬ μ‹œν€€μŠ€μ˜ 정보λ₯Ό μ‘°νšŒν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. μ‹€ν–‰ κ²°κ³Όλ‘œλŠ” μ‹œν€€μŠ€μ˜ 이름(sequence_name), μ΅œμ†Œκ°’(min_value), μ΅œλŒ€κ°’(max_value), 증가값(increment_by), λ§ˆμ§€λ§‰ 번호(last_number), μΊμ‹œ 크기(cache_size), μˆœν™˜ μ—¬λΆ€(cycle_flag) 등을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 이름이 'my_sequence'인 μ‹œν€€μŠ€λ₯Ό μ‘°νšŒν•˜κ³ μž ν•œλ‹€λ©΄ μ•„λž˜μ™€ 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SELECT sequence_name, min_value, max_value, increment_by, last_number,
       cache_size, cycle_flag
FROM user_sequences
WHERE sequence_name = 'my_sequence';

μœ„μ˜ SQL문을 μ‹€ν–‰ν•˜λ©΄ 'my_sequence'λΌλŠ” μ΄λ¦„μ˜ μ‹œν€€μŠ€μ— λŒ€ν•œ μƒμ„Έν•œ 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œν€€μŠ€λ₯Ό μ‘°νšŒν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μœΌλ‹ˆ, λ‹€μŒμœΌλ‘œ μ‹œν€€μŠ€μ˜ 값을 μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

4. μ‹œν€€μŠ€ μˆ˜μ •ν•˜κΈ°

μ‹œν€€μŠ€λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” ALTER SEQUENCE 문을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€λ₯Ό μˆ˜μ •ν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같은 μ˜΅μ…˜μ„ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • START WITH : μ‹œν€€μŠ€κ°€ μ‹œμž‘λ  κ°’
  • INCREMENT BY : μ‹œν€€μŠ€κ°€ 증가할 κ°’
  • MINVALUE : μ‹œν€€μŠ€μ˜ μ΅œμ†Œκ°’
  • MAXVALUE : μ‹œν€€μŠ€μ˜ μ΅œλŒ€κ°’
  • CYCLE : μ‹œν€€μŠ€κ°€ μ΅œλŒ€κ°’μ— λ„λ‹¬ν•˜λ©΄ λ‹€μ‹œ μ΅œμ†Œκ°’λΆ€ν„° μ‹œμž‘ν•˜λŠ”μ§€ μ—¬λΆ€
  • CACHE : μ‹œν€€μŠ€ 값을 μΊμ‹œν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬μ§€ μ—¬λΆ€

예λ₯Ό λ“€μ–΄, 이름이 'my_sequence'인 μ‹œν€€μŠ€μ˜ 증가값을 2둜 μˆ˜μ •ν•˜κ³  μ‹Άλ‹€λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ALTER SEQUENCE my_sequence
  INCREMENT BY 2;

μœ„μ˜ ALTER SEQUENCE 문을 μ‹€ν–‰ν•˜λ©΄ 'my_sequence'λΌλŠ” μ΄λ¦„μ˜ μ‹œν€€μŠ€μ˜ 증가값이 2둜 λ³€κ²½λ©λ‹ˆλ‹€. λ‹€λ₯Έ μ˜΅μ…˜λ“€λ„ λ§ˆμ°¬κ°€μ§€λ‘œ λ™μΌν•œ λ°©μ‹μœΌλ‘œ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œν€€μŠ€λ₯Ό μˆ˜μ •ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μœΌλ‹ˆ, λ‹€μŒμœΌλ‘œ μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

5. μ‹œν€€μŠ€ μ‚­μ œν•˜κΈ°

μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜κΈ° μœ„ν•΄μ„œλŠ” DROP SEQUENCE 문을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

DROP SEQUENCE sequence_name;

μœ„μ˜ DROP SEQUENCE λ¬Έμ—μ„œ sequence_name은 μ‚­μ œν•  μ‹œν€€μŠ€μ˜ 이름을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 이름이 'my_sequence'인 μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

DROP SEQUENCE my_sequence;

μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 'my_sequence'λΌλŠ” μ΄λ¦„μ˜ μ‹œν€€μŠ€κ°€ μ‚­μ œλ©λ‹ˆλ‹€. μ‹œν€€μŠ€ μ‚­μ œ μ΄ν›„μ—λŠ” ν•΄λ‹Ή μ‹œν€€μŠ€μ— μ˜ν•΄ μƒμ„±λœ λͺ¨λ“  값을 μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. λ•Œλ¬Έμ— μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜κΈ° 전에 μ–΄λ– ν•œ 이유둜 μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν–ˆλŠ”μ§€λ₯Ό μΆ©λΆ„νžˆ κ²€ν† ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ‹œν€€μŠ€λ₯Ό μ‚­μ œν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 이제 μ‹œν€€μŠ€μ˜ μ‚¬μš© μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

λŒ“κΈ€