IF @V_OVER_YN = 'Y' BEGIN IF @V_RT_YN = 'Y' BEGIN SET @V_QT_PO = @V_QT_PO + ISNULL(@V_QT_PO, 0) * (CASE WHEN ISNULL(@V_RT_PLUS, 0) = 0 THEN 0 ELSE @V_RT_PLUS / 100 END) END ELSE BEGIN SET @V_QT_PO = 9999999999 END END
이부분을
BEGIN IF V_OVER_YN = 'Y' BEGIN IF V_RT_YN = 'Y' BEGIN SET V_QT_PO := V_QT_PO + NVL(V_QT_PO, 0) * (CASE WHEN NVL(V_RT_PLUS, 0) = 0 THEN 0 ELSE V_RT_PLUS / 100 END); END; ELSE BEGIN SET V_QT_PO := 9999999999; END; END; END;
로 수정했는데
SET함수를 빼야하는지 세미콜론은 맞게 들어갅건지 모르겠습니다.
첫번째 IF문과 두번째 IF문 사이의 BEGIN에 빨간줄이 쳐져있습니다ㅠㅠ
기초 문법을 모르시는 상태에서 계속 만드시려고 해봤자 실수만 반복하실 수밖에 없을 것 같아요.
기초 문법 한번 쭉 훓어보시고
http://www.gurubee.net/oracle/plsql
아까 링크해드린 레퍼런스도 한번 보시구요~
IF V_OVER_YN = 'Y' THEN IF V_RT_YN = 'Y' THEN V_QT_PO := V_QT_PO + NVL(V_QT_PO, 0) * (CASE WHEN NVL(V_RT_PLUS, 0) = 0 THEN 0 ELSE V_RT_PLUS / 100 END); ELSE V_QT_PO := 9999999999; END IF; END IF;
1. NVL 을 매 수식마다 사용하는데..
- 실제로 널이 가능한지 확인 필요합니다.
- 널이 들어올 가능성이 없다면 과감하게 NVL 빼시구요.
- 널이 가능하다면? 수식에서 NVL 하기보다는 미리 NVL 하는게 좋을 듯 하네요.
2. CASE 를 사용했으나?
- 불필요한 구문이네요.
v_qt_po := NVL(v_qt_po , 0); v_rt_plus := NVL(v_rt_plus, 0); IF v_over_yn = 'Y' THEN IF v_rt_yn = 'Y' THEN v_qt_po := v_qt_po + v_qt_po * v_rt_plus / 100; ELSE v_qt_po := 9999999999; END IF; END IF;