본문 바로가기

데이터베이스/ORACLE

[Oracle] 연산이 필요한 게 아니라면 NUMBER 타입을 쓰지 말자

CVC를 NUMBER로 지정하고, 값을 000으로 줬더니

SELECT 하니까 0으로 나온다.

000인데 0으로 나오는 줄 알았더니 그게 아니었다.

 

심지어 SELECT * FROM CARD_CONTRACT_TEST01 WHERE CVC = 0;  해도 조회가 된다.

이제서야 이렇게 되는걸 알았네.

숫자연산이 필요한게 아니라면 절대 NUMBER 타입으로 만들지 말자!! 

 

 

CREATE TABLE CARD_CONTRACT_TEST01(
    CARD_NUM CHAR(16) PRIMARY KEY,
    CARD_PRODUCT_CODE VARCHAR2(3) NOT NULL,
    RESI_NUM CHAR(13) NOT NULL,
    CVC NUMBER(3) NOT NULL,
    PASSWORD NUMBER(4) NOT NULL -- 제약조건 추가안함
);
    


--ALTER TABLE CARD_CONTRACT_TEST01 MODIFY(CARD_NUM NUMBER(16));
--ALTER TABLE CARD_CONTRACT_TEST01 MODIFY(CARD_PRODUCT_CODE VARCHAR2(3));

INSERT INTO CARD_CONTRACT_TEST01 VALUES('9770810030728333', '1', '9203101937988', '000', '0000'); -- 카드번호, 카드상품코드(FK), 주민등록번호(FK)
SELECT * FROM CARD_CONTRACT_TEST01 WHERE CVC = 0;
COMMIT;

 


-- 잘못 안 정보다. CHAR 타입으로 바꿔도 똑같이 조회가 된다.

-- WHERE = 0 하면 CHAR라도 조회가 되고,

-- WHERE = '0' 으로 하면 조회가 안된다.