본문 바로가기

나 취준생/SQL

SQL - 암시적 형변환을 항상 조심

320x100


실제로 한 현업에서 있던 사고 :




예제 : 직업이 PRESIDENT인 사원빼고 모든 사원들의 월급을 출력하기


select (decode(job,'PRESIDENT',null,sal))

 from emp;



예제 : 위의 결과에서 최고 월급만 출력하기


select MAX(decode(job,'PRESIDENT',null,sal))

 from emp;



** 3000이 아닌 950이 나온 이유


decode(job,'PRESIDENT,null,sal) 을 사용했을 때

세 번째 값 null이기 때문에, 네 번째 인자값인 sal이 문자형으로 암시적 형변환이 발생해버렸기 때문


위와 같이 sal을 문자형 기준으로 정렬하면, 맨 앞의 숫자인 9가 제일 큰 값으로 인식된다.


그래서 사고가 났다고 한다 ㅎ



그렇다면 어떻게 짰어야 했을까?


올바른 코드 : null 값이 아닌 0으로 바꾸자!


select max(decode(job,'PRESIDENT',0,sal))

 from emp;




반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - INDEX FULL SCAN, INDEX FAST FULL SCAN  (0) 2020.11.17
SQL - UNIQUE INDEX  (0) 2020.11.17
SQL - full table scan, index range scan ( + 튜닝 )  (0) 2020.11.16
SQL - 유저 생성, 삭제, 권한 부여, 회수  (0) 2020.11.16
SQL - WITH 절  (0) 2020.11.13