저는 공장자동화 유지보수 업무를 담당하고 있습니다.
프로그램 수정을 위해 기존 프로그램을 분석하던 중 의문사항이 있어서 질문을 드립니다.
nvl(column, value)에서 항목 전자는 컬럼명으로 알고 있는데
nvl(1, 0)으로 되어있는부분이 있던데
[exec sql select nvl(1,0) into :dummy from coils_setp_auto where coil_id = :T_act_p->coil_id;]
컬럼이 1이 어떤의미 인지 문의좀 드리겠습니다.
coils_setp_auto 테이블을 조회 해보면 첫번째 컬럼은 coil_id 항목인데
위 쿼리의 dummy 항목과는 일치하지 않네요
미리 답변에대해 감사드립니다.
nvl(column, value) 만 가능한게 아니고
nvl(exp1, exp2) 로 생각하셔야 합니다.
exp 는 표현식이구요. 다양한 표현식이 올 수 있습니다.
표현식 : 컬럼, 상수, 변수, 내장함수, 사용자 함수, 서브쿼리 등등
nvl(1,0) 은 그냥 1 이죠. 의미 없이 사용된 거네요.
아마도 특정 의도를 가지고 사용한 것 인데
의도와는 다른 결과가 나온 것으로 잘못 사용한 예입니다.
추측되는 의도는 조건 검색 결과가 있으면 1 을 리턴하기 위한 것인데
조건 검색 결과가 없을 경우 0 을 리턴하기 위해 NVL 을 사용한 것인데요.
의도와는 다르게 실제로 검색결과가 없으면 0 이 리턴되지 않습니다.
nvl 은 null 을 다른 값으로 바꾸는 역할을 하는데
검색결과가 없으면 null 조차도 없습니다.
nvl 할 대상이 없는거죠.
검색 대상이 있는지를 체크하려면 단순하게 집계함수 count(*) 를 사용하면 됩니다.
SELECT COUNT(*) INTO :dummy FROM coils_setp_auto WHERE coil_id = :T_act_p->coil_id