Cute Happy Ghost
본문 바로가기
DB/Oracle

20201030_ 25시퀀스 문제 및 해결

by JENN_tech7 2020. 10. 30.
728x90
SMALL

#1 

 

요구사항

      시퀀스

  • SEQ_BRAND_ID : 100부터 시작하여 100씩 증가, 최대값 1000, 반복 없음.
  • SEQ_PRODUCT_NO : 1부터 시작하여 1씩 증가, 최대값 10000, 반복 없음.

 

 

 

 

CREATE TABLE BRANDS(
    BRAND_ID NUMBER PRIMARY KEY,
    BRAND_NAME VARCHAR2(100) NOT NULL
);

 

    PRODUCT_NAME VARCHAR2(50) NOT NULL,

50 아니고 20

 

 

 

 

 

1.

원인 : product 테이블에 UNIQUE(serial_no)를 요구하고 있으나 걸려있지않음.

조치:  ALter Table 테이블이름 ADD UNIQUE(컬럼);

ALTER TABLE products ADD UNIQUE(serial_no);

 

 

 

2.

원인 : SEQ-BRAND_ID 시퀀스가 'MAXVALUE 1000'으로 기술되어있었지만, 생성시 500으로 생성하고 있었음

MAXVALUE 500

조치:

ALTER SEQUENCE seq_brand_id MAXVALUE 1000;
SELECT * FROM user_sequences WHERE sequence_name = 'SEQ_BRAND_ID';

시퀀스의 정의를 변경해준다

 

 

 

 

3.

원인 : 애플을 INSERT하는 부분에서 NEXTVAL이 아닌 CURRVAL가 작성되어있었음

INSERT INTO BRANDS VALUES (SEQ_BRAND_ID.CURRVAL, '애플');

조치 : 시퀀스 CURRAVAL -> NEXTVAL로 변경

INSERT INTO BRANDS VALUES (SEQ_BRAND_ID.NEXTVAL, '애플');

 

 

원인키워드: UNIQUE, NEXTVAL, CURRVAL, MAXVALUE

조치키워드: ALTER, MAXVALUE, CURRVAL, NEXTVAL

 

 

 

 

 


#2

 

요구사항

     시퀀스

  • SEQ_BRAND_ID : 100부터 시작하여 100씩 증가, 최대값 1000, 반복 없음.
  • SEQ_PRODUCT_NO : 1부터 시작하여 1씩 증가, 최대값 10000, 반복 없음.

 

 

 

DROP TABLE brands CASCADe CONSTRAINTS;
DROP TABLE products CASCADe CONSTRAINTS;
DROP SEQUENCE seq_brand_id;//시퀀스삭제

삭제먼저해주고 다시 시작

 

 

 

 

 

 

1.

원인: product 테이블에서 sold_out이 DEFAULT가 'N'으로 정의되어있었으나, DEFAULT값을 설정을 안했음

조치:

ALTER TABLE products MODIFY (sold_out DEFAULT 'N');
UPDATE products SET sold_out = 'N' WHERE sold_out IS NULL;

 

2.

원인 : seq_product_no 시퀀스 시작값 (start with)이 1이고, 증가값(increment by)이 1으로 정의하기로 했으나, 100, 100으로 생성을 했음

조치 : 증가단위를 1로 변경

ALTER SEQUENCE seq_product_no INCREMENT BY 1;

 

 

 

3.

원인 : products 테이블에서 serial_no는 UNIQUE 제약조건이 걸려있지만, INSERT 부분에서 중복되는 값을 입력함

조치 : 중복되지 않는 값으로 변경

INSERT INTO PRODUCTS VALUES (SEQ_PRODUCT_NO.NEXTVAL, '아이폰10S', 1000000, 200, '10s',DEFAULT);

 

 

 

 

 

#3

 

요구사항

     시퀀스

  • SEQ_BRAND_ID : 100부터 시작하여 100씩 증가, 최대값 1000, 반복 없음.
  • SEQ_PRODUCT_NO : 1부터 시작하여 1씩 증가, 최대값 10000, 반복 없음.

 

 

1.

원인 : 테이블 정의서에는 products 테이블에서 product_name 컬럼이 NN 제약조건이 있다고 표시되어 있으나, 설정하지 않음( 요구사항 불충족)

조치 :

ALTER TABLE products MODIFY product_name NOT NULL;

 

 

 

2.

원인 : brands 테이블에 삼성 입력시 nextval이 아닌 currval가 insert됨

INSERT INTO brands VALUES(seq_brand_id.currVAL, '삼성');

조치 : currval 를 nextval로 바꿔준다

INSERT INTO brands VALUES(seq_brand_id.NEXTVAL, '삼성');

 

 

 

 

3.

원인 : products 테이블의 FK제약조건을 위배함. 부모 테이블에 참조할 행이 존재하지않음(300)

조치 : 존재하는 부모테이블의 행을 참조하거나 삭제하면된다

728x90
LIST

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

부적합한 열유형 null 처리방법  (0) 2021.01.28
20201030_25 권한부여, 회수, 동의어  (0) 2020.10.30
20201029_24  (0) 2020.10.29
20201029_24 순위, 누적, 집계, 조인  (0) 2020.10.29
20201028_23 UPDATE, MERGE  (0) 2020.10.28

댓글