#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)
조치 : 존재하는 부모테이블의 행을 참조하거나 삭제하면된다
'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 |
댓글