반응형
문제를 풀다가 의문점이 발생했다.
select name, jumin, decode(substr(jumin,7, 1), 1, 'MAN', 2, 'WOMAN') "Gender"
from student
where deptno1 = 101;
이 문제에서 decode 조건문에서는 1과 2를 따옴표로 감싸지 않아도 동작했다.
select name, tel, decode(substr(TEL, 1, instr(tel, ')')-1), '02', 'SEOUL', '031', 'GYEONGGI', '051', 'BUSAN', '052', 'ULSAN', '055', 'GYEONGNAM') loc
from student
where deptno1 = 101;
하지만 위 코드에서는 지역번호 02, 031, 051 등을 따옴표로 감싸지 않으면 동작하지 않았다.
02 등 지역번호들을 숫자취급하지 않고 문자열로 취급했다는 뜻이다.
substr문과 instra문의 문제는 아니다.
substr문은 반환값의 형식이 varchar2(가변길이 문자열 데이터 타입)이지만 숫자와 비교는 정상적으로 된다.
instr문은 반환값이 숫자다.
그래서 왜 그런가 chatGPT 선생님에게 여쭤봤다.
즉, 지역번호는 숫자상수 앞에 '0'이 붙어서 문자열 상수로 취급받아버렸고.
문자열 상수를 따옴표로 감싸지 않아서 코드가 제대로 동작하지 않았던 것이다.
반응형
'프로그래밍 > 오라클 SQL과 PLSQL' 카테고리의 다른 글
교재 84, 85페이지 REPLACE 퀴즈 1 ~ 4번 (0) | 2023.04.04 |
---|---|
교재 81, 82페이지 LAPD, RAPD 퀴즈 (0) | 2023.04.04 |
[오라클 SQL과 PL/SQL] decode 퀴즈 1, 2, case문 퀴즈 (0) | 2023.03.26 |
[오라클 SQL과 PLSQL] 79p SUBSTR/INSTR 퀴즈 (0) | 2023.03.14 |
dual 테이블이란? (0) | 2023.03.14 |