:meta-keywords: serial definition, create serial, alter serial, drop serial :meta-description: Define serials in CUBRID database using create serial, alter serial and drop serial statements. ************* 시리얼 ì •ì˜ë¬¸ ************* CREATE SERIAL ============= 시리얼(**SERIAL**)ì€ ê³ ìœ í•œ ìˆœë²ˆì„ ìƒì„±í•˜ëŠ” ê°ì²´ì´ë‹¤. ì‹œë¦¬ì–¼ì€ ë‹¤ìŒê³¼ ê°™ì€ íŠ¹ì„±ì„ ê°–ëŠ”ë‹¤. * ì‹œë¦¬ì–¼ì€ ë‹¤ì¤‘ ì‚¬ìš©ìž í™˜ê²½ì—서 ê³ ìœ í•œ ìˆœë²ˆì„ ìƒì„±í•˜ëŠ”ë° ìš©ì´í•˜ë‹¤. * 시리얼 번호는 í…Œì´ë¸”ê³¼ ë…립ì 으로 ìƒì„±ëœë‹¤. ë”°ë¼ì„œ 하나 ì´ìƒì˜ í…Œì´ë¸”ì— ë™ì¼í•œ ì‹œë¦¬ì–¼ì„ ì‚¬ìš©í• ìˆ˜ 있다. * **PUBLIC** ì„ í¬í•¨í•˜ì—¬ ëª¨ë“ ì‚¬ìš©ìžê°€ 시리얼 ê°ì²´ë¥¼ ìƒì„±í• 수 있다. ì¼ë‹¨ ìƒì„±ë˜ë©´ ëª¨ë“ ì‚¬ìš©ìžë“¤ì´ **CURRENT_VALUE (CURRVALê³¼ ë™ì¼)**, **NEXT_VALUE (NEXTVALê³¼ ë™ì¼)** 를 통해 시리얼 숫ìžë¥¼ ê°€ì ¸ê°ˆ 수 있다. * 시리얼 ê°ì²´ì˜ ì†Œìœ ìžì™€ **DBA** ë§Œ 시리얼 ê°ì²´ë¥¼ ê°±ì‹ í•˜ê³ ì‚ì œí• ìˆ˜ 있다. ì†Œìœ ìžê°€ **PUBLIC** ì´ë©´ ëª¨ë“ ì‚¬ìš©ìžê°€ ê°±ì‹ í•˜ê±°ë‚˜ ì‚ì œí• ìˆ˜ 있다. **CREATE SERIAL** ë¬¸ì„ ì´ìš©í•˜ì—¬ ë°ì´í„°ë² ì´ìŠ¤ì— ì‹œë¦¬ì–¼ ê°ì²´ë¥¼ ìƒì„±í•œë‹¤. 시리얼 ì´ë¦„ 작성 ì›ì¹™ì€ :doc:`/sql/identifier`\를 ì°¸ê³ í•œë‹¤. :: CREATE SERIAL [schema_name.]serial_name [START WITH initial] [INCREMENT BY interval] [MINVALUE min | NOMINVALUE] [MAXVALUE max | NOMAXVALUE] [CYCLE | NOCYCLE] [CACHE cached_num | NOCACHE] [COMMENT 'comment_string']; * *schema_name*: ì‹œë¦¬ì–¼ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì§€ì •í•œë‹¤(최대 31 ë°”ì´íЏ). ìƒëžµí•˜ë©´ 현재 ì„¸ì…˜ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì‚¬ìš©í•œë‹¤. * *serial_name*: ìƒì„±í• ì‹œë¦¬ì–¼ì˜ ì´ë¦„ì„ ì§€ì •í•œë‹¤(최대 222 ë°”ì´íЏ). * **START WITH** *initial*: ì²˜ìŒ ìƒì„±ë˜ëŠ” 시리얼 숫ìžë¥¼ ì§€ì •í•œë‹¤. ì´ ê°’ì˜ ë²”ìœ„ëŠ” -1,000,000,000,000,000,000,000,000,000,000,000,000(-10^36)와 9,999,999,999,999,999,999,999,999,999,999,999,999(10^37-1) 사ì´ì´ë‹¤. 오름차순 ì‹œë¦¬ì–¼ì˜ ê²½ìš° ê¸°ë³¸ê°’ì€ 1ì´ë©° 내림차순 ì‹œë¦¬ì–¼ì˜ ê²½ìš° ê¸°ë³¸ê°’ì€ -1ì´ë‹¤. * **INCREMENT BY** *interval*: 시리얼 ìˆ«ìž ê°„ì˜ ê°„ê²©ì„ ì§€ì •í•œë‹¤. *interval* 값으로 0ì„ ì œì™¸í•˜ê³ -9,999,999,999,999,999,999,999,999,999,999,999,999(-10^37+1)와 9,999,999,999,999,999,999,999,999,999,999,999,999(10^37-1) 사ì´ì˜ ì–´ëŠ ì •ìˆ˜ë¼ë„ 올 수 있다. *interval* ì˜ ì ˆëŒ€ê°’ì€ **MAXVALUE** 와 **MINVALUE** ì˜ ì°¨ì´ì™€ 같거나 작아야 한다. ìŒìˆ˜ê°€ ì„¤ì •ë˜ë©´ ì‹œë¦¬ì–¼ì€ ë‚´ë¦¼ì°¨ìˆœì´ ë˜ê³ 양수가 ì„¤ì •ë˜ë©´ ì˜¤ë¦„ì°¨ìˆœì´ ëœë‹¤. ê¸°ë³¸ê°’ì€ **1** ì´ë‹¤. * **MINVALUE**: ì‹œë¦¬ì–¼ì˜ ìµœì†Œê°’ì„ ì§€ì •í•œë‹¤. ì´ ê°’ì˜ ë²”ìœ„ëŠ” -1,000,000,000,000,000,000,000,000,000,000,000,000(-10^36)와 9,999,999,999,999,999,999,999,999,999,999,999,999(10^37-1) 사ì´ì´ë‹¤. **MINVALUE**\는 초기값보다 작거나 같아야 í•˜ê³ ìµœëŒ€ê°’ë³´ë‹¤ 작아야 한다. * **NOMINVALUE**: 오름차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” 1, 내림차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” -1,000,000,000,000,000,000,000,000,000,000,000,000(-10^36) ì´ ìµœì†Œê°’ìœ¼ë¡œ ìžë™ ì§€ì •ëœë‹¤. * **MAXVALUE**: ì‹œë¦¬ì–¼ì˜ ìµœëŒ€ê°’ì„ ì§€ì •í•œë‹¤. ì´ ê°’ì˜ ë²”ìœ„ëŠ” -999,999,999,999,999,999,999,999,999,999,999,999(-10^36+1)와 10,000,000,000,000,000,000,000,000,000,000,000,000(10^37) 사ì´ì´ë‹¤. **MAXVALUE**\는 초기값보다 í¬ê±°ë‚˜ 같아야 í•˜ê³ ìµœì†Œê°’ë³´ë‹¤ 커야 한다. * **NOMAXVALUE**: 오름차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” 10,000,000,000,000,000,000,000,000,000,000,000,000(10^37), 내림차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” -1ì´ ìµœëŒ€ê°’ìœ¼ë¡œ ìžë™ ì§€ì •ëœë‹¤. * **CYCLE**: 시리얼 ê°’ì´ ìµœëŒ€ ë˜ëŠ” ìµœì†Œê°’ì— ë„달한 í›„ì— ì—°ì†ì 으로 ê°’ì„ ìƒì„±í•˜ë„ë¡ ì§€ì •í•œë‹¤. 오름차순 ì‹œë¦¬ì–¼ì€ ìµœëŒ€ê°’ì— ë„달한 í›„ì— ë‹¤ìŒ ê°’ìœ¼ë¡œ ìµœì†Œê°’ì´ ìƒì„±ëœë‹¤. 내림차순 ì‹œë¦¬ì–¼ì€ ìµœì†Œê°’ì— ë„달한 í›„ì— ë‹¤ìŒ ê°’ìœ¼ë¡œ ìµœëŒ€ê°’ì´ ìƒì„±ëœë‹¤. * **NOCYCLE**: ì‹œë¦¬ì–¼ì´ ìµœëŒ€ ë˜ëŠ” ìµœì†Œê°’ì— ë„달한 í›„ì— ì‹œë¦¬ì–¼ ê°’ì´ ë” ì´ìƒ ìƒì„±ë˜ì§€ 않ë„ë¡ ì§€ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ **NOCYCLE** ì´ë‹¤. * **CACHE**: 시리얼 ì„±ëŠ¥ì„ í–¥ìƒì‹œí‚¤ê¸° 위하여 *cached_num* ì— ì§€ì •ëœ ê°œìˆ˜ë§Œí¼ì˜ ì‹œë¦¬ì–¼ì„ ìºì‹œì— ì €ìž¥í•˜ê³ , 시리얼 ê°’ì„ ìš”ì²ë°›ìœ¼ë©´ ìºì‹œëœ 시리얼 ê°’ì„ ê°€ì ¸ì˜¨ë‹¤. ë˜í•œ, ë©”ëª¨ë¦¬ì— ìºì‹œëœ ì‹œë¦¬ì–¼ì„ ì „ë¶€ 사용하게 ë˜ë©´, *cached_num* 개수 ë§Œí¼ì˜ ì‹œë¦¬ì–¼ì„ ë””ìŠ¤í¬ë¡œë¶€í„° 메모리로 다시 ê°€ì ¸ì˜¤ë©°, ë°ì´í„°ë² ì´ìФ 서버가 ì¤‘ê°„ì— ì¢…ë£Œë˜ë©´ ìºì‹œëœ 시리얼 ê°’ë“¤ì€ ì‚ì œëœë‹¤. ë”°ë¼ì„œ ë°ì´í„°ë² ì´ìФ 서버가 재시작ë˜ê¸° ì´ì „ê³¼ ì´í›„ì˜ ì‹œë¦¬ì–¼ ê°’ì€ ë¹„ì—°ì†ì ì¼ ìˆ˜ 있다. ìºì‹œëœ ì‹œë¦¬ì–¼ì€ íŠ¸ëžœìžì…˜ 롤백ë˜ì§€ 않으므로, ë¡¤ë°±ì„ ìˆ˜í–‰í•˜ë”ë¼ë„ 다ìŒì— ìš”ì²í•˜ëŠ” ì‹œë¦¬ì–¼ì€ ì´ì „ì— ìµœì¢… ìš”ì²í•œ 시리얼 ê°’ì˜ ë‹¤ìŒ ê°’ì´ ëœë‹¤. **CACHE** 키워드 ë’¤ì— *cached_num* 는 ìƒëžµí• 수 없으며, 1 ì´í•˜ì˜ 숫ìžê°€ ì§€ì •ë˜ë©´ 시리얼 ìºì‹œê°€ ì ìš©ë˜ì§€ 않는다. * **NOCACHE**: 시리얼 ìºì‹œ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì§€ 않으며, 매번 시리얼 ê°’ì„ ì—…ë°ì´íŠ¸í•œë‹¤. ê¸°ë³¸ê°’ì€ **NOCACHE** ì´ë‹¤. * *comment_string*: ì‹œë¦¬ì–¼ì˜ ì»¤ë©˜íŠ¸ë¥¼ ì§€ì •í•œë‹¤. .. code-block:: sql --creating serial with default values CREATE SERIAL order_no; --creating serial within a specific range CREATE SERIAL order_no START WITH 10000 INCREMENT BY 2 MAXVALUE 20000; --creating serial with specifying the number of cached serial values CREATE SERIAL order_no START WITH 10000 INCREMENT BY 2 MAXVALUE 20000 CACHE 3; --selecting serial information from the db_serial class SELECT * FROM db_serial; :: name current_val increment_val max_val min_val cyclic started cached_num att_name ==================================================================================================================================================== 'order_no' 10006 2 20000 10000 0 1 3 NULL 다ìŒì€ ì„ ìˆ˜ 번호와 ì´ë¦„ì„ ì €ìž¥í•˜ëŠ” *athlete_idx* í…Œì´ë¸”ì„ ìƒì„±í•˜ê³ *order_no* ì‹œë¦¬ì–¼ì„ ì´ìš©í•˜ì—¬ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ì˜ˆì œì´ë‹¤. *order_no*.CURRENT_VALUE는 ì‹œë¦¬ì–¼ì˜ í˜„ìž¬ ê°’ì„ ë°˜í™˜í•˜ê³ , *order_no*.NEXT_VALUE는 시리얼 ê°’ì„ ì¦ê°€ì‹œí‚¨ 후 ê°’ì„ ë°˜í™˜í•œë‹¤. .. code-block:: sql CREATE TABLE athlete_idx( code INT, name VARCHAR(40) ); CREATE SERIAL order_no START WITH 10000 INCREMENT BY 2 MAXVALUE 20000; INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Park'); INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Kim'); INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Choo'); INSERT INTO athlete_idx VALUES (order_no.CURRENT_VALUE, 'Lee'); SELECT * FROM athlete_idx; :: code name =================================== 10000 'Park' 10002 'Kim' 10004 'Choo' 10004 'Lee' ì‹œë¦¬ì–¼ì˜ ì»¤ë©˜íŠ¸ --------------- 다ìŒì€ 시리얼 ìƒì„± 시 커멘트를 추가한다. .. code-block:: sql CREATE SERIAL order_no START WITH 100 INCREMENT BY 2 MAXVALUE 200 COMMENT 'from 100 to 200 by 2'; ì‹œë¦¬ì–¼ì˜ ì»¤ë©˜íŠ¸ë¥¼ 확ì¸í•˜ë ¤ë©´ 다ìŒì˜ êµ¬ë¬¸ì„ ì‹¤í–‰í•œë‹¤. .. code-block:: sql SELECT name, comment FROM db_serial; 시리얼 ì»¤ë©˜íŠ¸ì˜ ë³€ê²½ì€ ALTER SERIAL ë¬¸ì˜ ì„¤ëª…ì„ ì°¸ê³ í•œë‹¤. ALTER SERIAL ============ **ALTER SERIAL** ë¬¸ì„ ì´ìš©í•˜ë©´ 시리얼 ê°’ì˜ ì¦ê°€ì¹˜ë¥¼ ê°±ì‹ í•˜ê³ ì‹œìž‘ ê°’, 최소 ê°’, 최대 ê°’ì„ ì„¤ì •í•˜ê±°ë‚˜ ì œê±°í• ìˆ˜ 있으며, 순환 ì†ì„±ì„ ì„¤ì •í• ìˆ˜ 있다. :: ALTER SERIAL [schema_name.]serial_name [INCREMENT BY interval] [START WITH initial_value] [MINVALUE min | NOMINVALUE] [MAXVALUE max | NOMAXVALUE] [CYCLE | NOCYCLE] [CACHE cached_num | NOCACHE] [COMMENT 'comment_string']; * *schema_name*: ì‹œë¦¬ì–¼ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì§€ì •í•œë‹¤(최대 31 ë°”ì´íЏ). ìƒëžµí•˜ë©´ 현재 ì„¸ì…˜ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì‚¬ìš©í•œë‹¤. * *serial_name*: ìƒì„±í• ì‹œë¦¬ì–¼ì˜ ì´ë¦„ì„ ì§€ì •í•œë‹¤(최대 222 ë°”ì´íЏ). * **INCREMENT BY** *interval*: 시리얼 숫ìžê°„ì˜ ê°„ê²©ì„ ì§€ì •í•œë‹¤. *interval* 값으로 0ì„ ì œì™¸í•œ 38ìžë¦¬ ì´í•˜ì˜ ì–´ë–¤ ì •ìˆ˜ë„ ì§€ì •í• ìˆ˜ 있다. *interval* ì˜ ì ˆëŒ€ê°’ì€ **MAXVALUE** 와 **MINVALUE** ì˜ ì°¨ì´ë³´ë‹¤ 작아야 한다. ìŒìˆ˜ê°€ ì„¤ì •ë˜ë©´ ì‹œë¦¬ì–¼ì€ ë‚´ë¦¼ì°¨ìˆœì´ ë˜ê³ 양수가 ì„¤ì •ë˜ë©´ ì˜¤ë¦„ì°¨ìˆœì´ ëœë‹¤. ê¸°ë³¸ê°’ì€ **1** ì´ë‹¤. * **START WITH** *initial_value*: ì‹œë¦¬ì–¼ì˜ ì‹œìž‘ ê°’ì„ ë³€ê²½í•œë‹¤. * **MINVALUE**: ì‹œë¦¬ì–¼ì˜ ìµœì†Œê°’ì„ ì§€ì •í•œë‹¤. ì´ ê°’ì€ 38ìžë¦¬ ì´í•˜ì˜ 숫ìžì´ë‹¤. **MINVALUE** 는 초기값보다 작거나 같아야 í•˜ê³ ìµœëŒ€ê°’ë³´ë‹¤ 작아야 한다. * **NOMINVALUE**: 오름차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” 1, 내림차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” -(10)\*\*38ì´ ìµœì†Œê°’ìœ¼ë¡œ ìžë™ ì§€ì •ëœë‹¤. * **MAXVALUE**: ì‹œë¦¬ì–¼ì˜ ìµœëŒ€ê°’ì„ ì§€ì •í•œë‹¤. ì´ ê°’ì€ 38ìžë¦¬ ì´í•˜ì˜ 숫ìžì´ë‹¤. **MAXVALUE** 는 초기값보다 í¬ê±°ë‚˜ 같아야 í•˜ê³ ìµœì†Œê°’ë³´ë‹¤ 커야 한다. * **NOMAXVALUE**: 오름차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” (10)\*\*37, 내림차순 ì‹œë¦¬ì–¼ì— ëŒ€í•´ì„œëŠ” -1ì´ ìµœëŒ€ê°’ìœ¼ë¡œ ìžë™ ì§€ì •ëœë‹¤. * **CYCLE**: 시리얼 ê°’ì´ ìµœëŒ€ ë˜ëŠ” ìµœì†Œê°’ì— ë„달한 í›„ì— ì—°ì†ì 으로 ê°’ì„ ìƒì„±í•˜ë„ë¡ ì§€ì •í•œë‹¤. 오름차순 ì‹œë¦¬ì–¼ì€ ìµœëŒ€ê°’ì— ë„달한 í›„ì— ë‹¤ìŒ ê°’ìœ¼ë¡œ ìµœì†Œê°’ì´ ìƒì„±ëœë‹¤. 내림차순 ì‹œë¦¬ì–¼ì€ ìµœì†Œê°’ì— ë„달한 í›„ì— ë‹¤ìŒ ê°’ìœ¼ë¡œ ìµœëŒ€ê°’ì´ ìƒì„±ëœë‹¤. * **NOCYCLE**: ì‹œë¦¬ì–¼ì´ ìµœëŒ€ ë˜ëŠ” ìµœì†Œê°’ì— ë„달한 í›„ì— ì‹œë¦¬ì–¼ ê°’ì´ ë” ì´ìƒ ìƒì„±ë˜ì§€ 않ë„ë¡ ì§€ì •í•œë‹¤. ê¸°ë³¸ê°’ì€ **NOCYCLE** ì´ë‹¤. * **CACHE**: 시리얼 ì„±ëŠ¥ì„ í–¥ìƒì‹œí‚¤ê¸° 위하여 *cached_num* ì— ì§€ì •ëœ ê°œìˆ˜ë§Œí¼ì˜ ì‹œë¦¬ì–¼ì„ ìºì‹œì— ì €ìž¥í•˜ê³ , 시리얼 ê°’ì„ ìš”ì²ë°›ìœ¼ë©´ ìºì‹œëœ 시리얼 ê°’ì„ ê°€ì ¸ì˜¨ë‹¤. **CACHE** 키워드 ë’¤ì— *cached_num* 는 ìƒëžµí• 수 없으며, 1 ì´í•˜ì˜ 숫ìžê°€ ì§€ì •ë˜ë©´ 시리얼 ìºì‹œê°€ ì ìš©ë˜ì§€ 않는다. * **NOCACHE**: 시리얼 ìºì‹œ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì§€ 않으며, 매번 시리얼 ê°’ì´ ì—…ë°ì´íЏëœë‹¤. ê¸°ë³¸ê°’ì€ **NOCACHE** ì´ë‹¤. * *comment_string*: ì‹œë¦¬ì–¼ì˜ ì»¤ë©˜íŠ¸ë¥¼ ì§€ì •í•œë‹¤. .. code-block:: sql --altering serial by changing start and incremental values ALTER SERIAL order_no START WITH 100 MINVALUE 100 INCREMENT BY 2; --altering serial to operate in cache mode ALTER SERIAL order_no CACHE 5; --altering serial to operate in common mode ALTER SERIAL order_no NOCACHE; .. warning:: CUBRID 2008 R1.x ë²„ì „ì—서는 시스템 ì¹´íƒˆë¡œê·¸ì¸ **db_serial** í…Œì´ë¸”ì„ ì—…ë°ì´íŠ¸í•˜ëŠ” ë°©ì‹ìœ¼ë¡œ 시리얼 ê°’ì„ ë³€ê²½í• ìˆ˜ 있었으나, CUBRID 2008 R2.0 ì´ìƒ ë²„ì „ë¶€í„°ëŠ” **db_serial** í…Œì´ë¸”ì˜ ìˆ˜ì •ì€ í—ˆìš©ë˜ì§€ ì•Šê³ **ALTER SERIAL** êµ¬ë¬¸ì„ ì´ìš©í•˜ëŠ” ë°©ì‹ë§Œ 허용ëœë‹¤. ë”°ë¼ì„œ CUBRID 2008 R2.0 ì´ìƒ ë²„ì „ì—서 내보내기(unloaddb)한 ë°ì´í„°ì— **ALTER SERIAL** êµ¬ë¬¸ì´ í¬í•¨ëœ 경우ì—는 ì´ë¥¼ CUBRID 2008 R1.x ì´í•˜ ë²„ì „ì—서 ê°€ì ¸ì˜¤ê¸°(loaddb)í• ìˆ˜ 없다. .. warning:: **ALTER SERIAL** ì´í›„ 첫번째 **NEXT_VALUE** ê°’ì„ êµ¬í•˜ë©´ CUBRID 9.0 미만 ë²„ì „ì—서는 **ALTER SERIAL** 로 ì„¤ì •í•œ ì´ˆê¸°ê°’ì˜ ë‹¤ìŒ ê°’ì„ ë°˜í™˜í–ˆìœ¼ë‚˜, CUBRID 9.0 ì´ìƒ ë²„ì „ì—서는 **ALTER_SERIAL** ì˜ ì„¤ì •ê°’ì„ ë°˜í™˜í•œë‹¤. :: CREATE SERIAL s1; SELECT s1.NEXTVAL; ALTER SERIAL s1 START WITH 10; SELECT s1.NEXTVAL; -- From 9.0, above query returns 10 -- In the version less than 9.0, above query returns 11 다ìŒì€ ì‹œë¦¬ì–¼ì˜ ì»¤ë©˜íŠ¸ë¥¼ 변경한다. .. code-block:: sql ALTER SERIAL order_no COMMENT 'new comment'; DROP SERIAL =========== **DROP SERIAL** 문으로 시리얼 ê°ì²´ë¥¼ ë°ì´í„°ë² ì´ìФì—서 ì‚ì œí• ìˆ˜ 있다. **IF EXISTS** ì ˆì„ í•¨ê»˜ ì§€ì •í•˜ëŠ” 경우, ëŒ€ìƒ ì‹œë¦¬ì–¼ì´ ì—†ì–´ë„ ì—러가 ë°œìƒí•˜ì§€ 않는다. :: DROP SERIAL [ IF EXISTS ] [schema_name.]serial_name ; * *schema_name*: ì‹œë¦¬ì–¼ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì§€ì •í•œë‹¤. ìƒëžµí•˜ë©´ 현재 ì„¸ì…˜ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì‚¬ìš©í•œë‹¤. * *serial_name*: ì‚ì œí• ì‹œë¦¬ì–¼ì˜ ì´ë¦„ì„ ì§€ì •í•œë‹¤. ë‹¤ìŒ ì˜ˆëŠ” *order_no* ì‹œë¦¬ì–¼ì„ ì‚ì œí•˜ëŠ” ì˜ˆì œì´ë‹¤. .. code-block:: sql DROP SERIAL order_no; DROP SERIAL IF EXISTS order_no; 시리얼 사용 =========== ì˜ì‚¬ 칼럼 --------- 시리얼 ì´ë¦„ê³¼ ì˜ì‚¬ 칼럼(pseudo column)ì„ í†µí•´ì„œ 해당 ì‹œë¦¬ì–¼ì„ ì½ê³ ê°±ì‹ í• ìˆ˜ 있다. :: [schema_name.]serial_name.CURRENT_VALUE [schema_name.]serial_name.CURRVAL [schema_name.]serial_name.NEXT_VALUE [schema_name.]serial_name.NEXTVAL * *schema_name*: ì‹œë¦¬ì–¼ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì§€ì •í•œë‹¤. ìƒëžµí•˜ë©´ 현재 ì„¸ì…˜ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ì„ ì‚¬ìš©í•œë‹¤. * *[schema_name.]serial_name*.\ **CURRENT_VALUE**, *[schema_name.]serial_name*.\ **CURRVAL**: ì‹œë¦¬ì–¼ì˜ í˜„ìž¬ ê°’ì„ ë°˜í™˜í•œë‹¤. * *[schema_name.]serial_name*.\ **NEXT_VALUE**, *[schema_name.]serial_name*.\ **NEXTVAL**: 시리얼 ê°’ì„ ì¦ê°€ì‹œí‚¤ê³ ê·¸ ê°’ì„ ë°˜í™˜í•œë‹¤. 다ìŒì€ ì„ ìˆ˜ 번호와 ì´ë¦„ì„ ì €ìž¥í•˜ëŠ” *athlete_idx* í…Œì´ë¸”ì„ ìƒì„±í•˜ê³ *order_no* ì‹œë¦¬ì–¼ì„ ì´ìš©í•˜ì—¬ ì¸ìŠ¤í„´ìŠ¤ë¥¼ ìƒì„±í•˜ëŠ” ì˜ˆì œì´ë‹¤. .. code-block:: sql CREATE TABLE athlete_idx (code INT, name VARCHAR (40)); CREATE SERIAL order_no START WITH 10000 INCREMENT BY 2 MAXVALUE 20000; INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Park'); INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Kim'); INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Choo'); INSERT INTO athlete_idx VALUES (order_no.NEXT_VALUE, 'Lee'); SELECT * FROM athlete_idx; SELECT order_no.CURRENT_VALUE; :: code name =================================== 10000 'Park' 10002 'Kim' 10004 'Choo' 10006 'Lee' serial_current_value(order_no) ====================== 10006 .. note:: ì‹œë¦¬ì–¼ì„ ìƒì„±í•˜ê³ ì²˜ìŒ ì‚¬ìš©í• ë•Œ **NEXT_VALUE** 를 ì´ìš©í•˜ë©´ 초기 ê°’ì„ ë°˜í™˜í•œë‹¤. ê·¸ ì´í›„ì—는 현재 ê°’ì— ì¦ê°€ ê°’ì´ ì¶”ê°€ë˜ì–´ 반환ëœë‹¤. 함수 ---- .. function:: SERIAL_CURRENT_VALUE ([schema_name.]serial_name) .. function:: SERIAL_NEXT_VALUE ([schema_name.]serial_name, number) 시리얼 함수ì—는 **SERIAL_CURRENT_VALUE** 함수와 **SERIAL_NEXT_VALUE** 함수가 있다. :param schema_name: ì‹œë¦¬ì–¼ì˜ ìŠ¤í‚¤ë§ˆ ì´ë¦„ :param serial_name: 시리얼 ì´ë¦„ :param number: ì–»ê³ ìž í•˜ëŠ” 시리얼 개수 :rtype: NUMERIC(38,0) **SERIAL_CURRENT_VALUE** 함수는 í˜„ìž¬ì˜ ì‹œë¦¬ì–¼ ê°’ì„ ë°˜í™˜í•˜ë©°, *serial_name*.\ **current_value** 와 ë™ì¼í•œ ê°’ì„ ë°˜í™˜í•œë‹¤. **SERIAL_NEXT_VALUE** 함수는 í˜„ìž¬ì˜ ì‹œë¦¬ì–¼ ê°’ì—서 ì§€ì •í•œ ê°œìˆ˜ì˜ ì‹œë¦¬ì–¼ ê°„ê²©ë§Œí¼ ì¦ê°€ì‹œí‚¨ ê°’ì„ ë°˜í™˜í•œë‹¤. 시리얼 ê°„ê²©ì€ **CREATE SERIAL ... INCREMENT BY** ì ˆë¡œ ì§€ì •í•œ ê°’ì„ ë”°ë¥¸ë‹¤. **SERIAL_NEXT_VALUE** (*serial_name*, 1)ì€ *serial_name*.\ **next_value** 와 ë™ì¼í•œ ê°’ì„ ë°˜í™˜í•œë‹¤. í•œêº¼ë²ˆì— ë§Žì€ ê°œìˆ˜ì˜ ì‹œë¦¬ì–¼ì„ ì–»ê³ ìž í• ë•Œì—는, *serial_name*.\ **next_value** 를 반복하여 호출하는 것보다 ì›í•˜ëŠ” 개수를 ì¸ìžë¡œ 하여 **SERIAL_NEXT_VALUE** 함수를 한 번만 호출하는 ê²ƒì´ ì„±ëŠ¥ìƒ ìœ ë¦¬í•˜ë‹¤. 즉, ì–´ë–¤ ì‘ìš© 프로세스가 í•œêº¼ë²ˆì— *N* ê°œì˜ ì‹œë¦¬ì–¼ì„ ì–»ê³ ìž í•œë‹¤ë©´ N번 *serial_name*.\ **next_value** 를 호출하여 ê°’ë“¤ì„ êµ¬í•˜ëŠ” 것보다는, 한 번 **SERIAL_NEXT_VALUE** (*serial_name*, *N*)ì„ í˜¸ì¶œí•˜ì—¬ 반환하는 ê°’ì„ ê°€ì§€ê³ (함수를 호출한 시ì ì˜ ì‹œë¦¬ì–¼ 시작값)ê³¼ (반환 ê°’) 사ì´ì˜ 시리얼 ê°’ë“¤ì„ ê³„ì‚°í•˜ëŠ” ê²ƒì´ ë‚«ë‹¤. (함수를 호출한 시ì ì˜ ì‹œë¦¬ì–¼ 시작값)ì€ (반환 ê°’) - (ì–»ê³ ìž í•˜ëŠ” 시리얼 개수-1) * (시리얼 간격)ì´ë‹¤. 예를 들어, 101로 시작하며 1씩 ì¦ê°€í•˜ëŠ” ì‹œë¦¬ì–¼ì„ ì²˜ìŒì— ìƒì„±í•˜ì˜€ì„ 경우, ì²˜ìŒ **SERIAL_NEXT_VALUE** (*serial_name*, 10)ì„ í˜¸ì¶œí•˜ë©´ 110ì´ ë°˜í™˜ëœë‹¤. ì´ ì‹œì ì˜ ì‹œìž‘ê°’ì„ êµ¬í•˜ë©´ 110-(10-1)*1 = 101ì´ë¯€ë¡œ 101, 102, 103, ... 110까지 10ê°œì˜ ì‹œë¦¬ì–¼ ê°’ì„ í•´ë‹¹ ì‘ìš© 프로세스ì—서 ì‚¬ìš©í• ìˆ˜ 있다. 한 번 ë” **SERIAL_NEXT_VALUE** (*serial_name*, 10)ì„ í˜¸ì¶œí•˜ë©´ 120ì´ ë°˜í™˜ë˜ë©°, ì´ ì‹œì ì˜ ì‹œìž‘ê°’ì€ 120-(10-1)*1 = 111ì´ë‹¤. .. code-block:: sql CREATE SERIAL order_no START WITH 101 INCREMENT BY 1 MAXVALUE 20000; SELECT SERIAL_CURRENT_VALUE(order_no); :: 101 .. code-block:: sql -- At first, the first serial value starts with the initial serial value, 10000. So the l0'th serial value will be 10009. SELECT SERIAL_NEXT_VALUE(order_no, 10); :: 110 .. code-block:: sql SELECT SERIAL_NEXT_VALUE(order_no, 10); :: 120 .. note:: ì‹œë¦¬ì–¼ì„ ìƒì„±í•˜ê³ **SERIAL_NEXT_VALUE** 함수를 ì²˜ìŒ í˜¸ì¶œí•˜ë©´, 첫 번째 ê°’ì€ ì´ˆê¸°ê°’ì„ ë°˜í™˜í•˜ë¯€ë¡œ 한 ê°œì˜ ê°’ì´ ë¹ ì ¸ í˜„ìž¬ì˜ ì‹œë¦¬ì–¼ ê°’ì— (시리얼 간격) * (ì–»ê³ ìž í•˜ëŠ” 시리얼 개수-1)ë§Œí¼ ì¦ê°€í•œ ê°’ì´ ë°˜í™˜ëœë‹¤. ì´í›„ **SERIAL_NEXT_VALUE** 함수를 호출하면 현재 ê°’ì— (시리얼 간격) * (ì–»ê³ ìž í•˜ëŠ” 시리얼 개수)ë§Œí¼ ì¦ê°€í•œ ê°’ì´ ë°˜í™˜ëœë‹¤. ìœ„ì˜ ì˜ˆì œë¥¼ ì°¸ê³ í•œë‹¤.