생각하는 감쟈

[Oracle] SQL 객체_02 : SEQUENCE 본문

Language/Oracle

[Oracle] SQL 객체_02 : SEQUENCE

생각하는 감쟈🥔 2024. 3. 29. 16:20

 SEQUENCE 객체 

  - 자동으로 증가 또는 감소되는 번호를 생성하기 위한 객체
  - 테이블에 독립적
  - 주로 적당한 PK를 선정할 수 없는 경우 (ex. 게시판의 게시글 번호 등) 사용
  - 지나간 시퀀스는 값은 재 사용할 수 없다.
  
  (사용형식)

  CREATE SEQUENCE 시퀀스명
    [START WITH 값] - 시작 값, 기본값 MINVALUE
    [INCREMENT BY 값] - {+}증가/{-}감소 값 기본은 1
    [MAXVALUE 값 | NOMAXVALUE] - 최대 값 NOMAXVALUE 가 DEFAULT 이며 10^27
    [MINVALUE 값 | NOMINVALUE] - 최소 값 NOMINVALUE 가 DEFAULT 이며 1임
    [CYCLE | NOCYCLE] - DEFAULT 는 NOCYCLE 이며 최대[최소]까지 도달 후 다시 시퀀스 생성 여부 결정
    [CACHE n | NOCACHE} - 시퀀스를 캐쉬에 생성해 놓고 사용할지 여부 DEFAULT 는 CACHE 20
    {ORDER | NOORDER] - 요청순서대로 생성 보장여부 DEFAULT 는 NOORDER
    
    -- 테이블이랑 독립적 
    
    -- 시퀀스는 의사컬럼(Pseudo Column: 시스템에서 제공) 을 사용하여 참조 됨

 

-----------------------------------------------
       의사컬럼            내용
-----------------------------------------------
    시퀀스명.NEXTVAL    시퀀스의 다음 값 
    시퀀스명.CURRVAL    시퀀스가 가지고 있는 현재 값
-----------------------------------------------


**** 시퀀스가 생성된 수 반드시 NEXTVAL 부터 호출되어야 한다
     NEXTVAL 이 호출될 때마다 증감값 만큼 증감됨(주의)
     
  사용예) 분류테이블에 다음 자료를 입력하시오
--------------------------------------------
     컬럼             값
--------------------------------------------
  LPROD_ID          10부터 증다되는 값(시퀀스 이용)
  LPROD_GU          'P502'
  LPROD_NM          '농산물'

  INSERT INTO LPROD(LPROD_ID,LPROD_GU,LPROD_NM)
  VALUES (seq_lprod_id.NEXTVAL,'P501','농산물');
  SELECT * FROM LPROD;

 


--------------------------------------------
  LPROD_ID          11
  LPROD_GU          'P502'
  LPROD_NM          '임산물'

  INSERT INTO LPROD(LPROD_ID,LPROD_GU,LPROD_NM)
  VALUES (seq_lprod_id.NEXTVAL,'P502','임산물');
  SELECT * FROM LPROD;

 


--------------------------------------------
  LPROD_ID          12
  LPROD_GU          'P503'
  LPROD_NM          '수산물'

  INSERT INTO LPROD(LPROD_ID,LPROD_GU,LPROD_NM)
  VALUES (seq_lprod_id.NEXTVAL,'P503','수산물');
  SELECT * FROM LPROD;

 

  SELECT seq_lprod_id.CURRVAL FROM DUAL; --시퀀스의 현재의 값
  
  -- CURRVLA / NEXTVAL
  -- 한번 지나간 시퀀스 값을 돌아갈수 없음
  -- DROP 시퀀스 후 다시 시작값 부여 하고 해야 함

   



     
    
    

'Language > Oracle' 카테고리의 다른 글

[Oracle] SQL 객체_04 : INDEX  (0) 2024.04.01
[Oracle] SQL 객체_03 : SYNONYM  (0) 2024.03.29
[Oracle] SQL 객체_01 : VIEW  (1) 2024.03.29
[Oracle] SQL 집합 연산자  (0) 2024.03.29
[Oracle] SQL 서브 쿼리_03 : SUBQUERY 사용한 DELETE  (0) 2024.03.28
Comments