Q&A

  • 오라클 사용자 정의함수를 사용하려는데 ...
안녕하세요.
오라클 사용자 정의함수를 하나 만들어 사용하려는데 계속 Invalid 상태가
되서요.

FUNC_GET_AMT (IN_JIKG_CODE IN VARCHAR2, IN_HOBONG IN VARCHAR2, IN_PD_CODE IN VARCHAR2)

RETURN NUMBER IS
  IS_RETURN  NUMBER(9);

BEGIN
   IS_RETURN := 0;
   -- 직급 및 호봉에 따른 기본급을 구한다
   IF IN_PD_CODE = 'PAY' THEN
      BEGIN
         SELECT GRAD_BASE_AMT
           INTO IS_RETURN
           FROM QX200MS
          WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
         RETURN IS_RETURN;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            BEGIN
               RETURN IS_RETURN;
            END;
      END;
   END IF;
   -- 차량유지비 및 교통비를 구한다
   IF IN_PD_CODE = 'A17' THEN
      BEGIN
         SELECT GRAD_CAR
           INTO IS_RETUTN
           FROM QX200MS
          WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
         RETURN IS_RETURN;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            BEGIN
               RETURN IS_RETURN;
            END;
      END;
   END IF;
   -- 시간외 수당을 구한다
   IF IN_PD_CODE = 'A10' THEN
      BEGIN
         SELECT GRAD_OT
           INTO IS_RETUTN
           FROM QX200MS
          WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
         RETURN IS_RETURN;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            BEGIN
               RETURN IS_RETURN;
            END;
      END;
   END IF;
END;

그리 복잡한 함수는 아닌데, 고생하고 있네요.
도대체 어디서 틀렸는지 모르겠네요.
그럼, 즐코하시길.
1  COMMENTS
  • Profile
    김지엽 2002.10.23 23:01
    이렇게 짜면 어떨까요?

    CREATE OR REPLACE PROCEDURE FUNC_GET_AMT (IN_JIKG_CODE IN VARCHAR2, IN_HOBONG IN VARCHAR2, IN_PD_CODE IN VARCHAR2, IS_RETURN OUT NUMBER) IS
    BEGIN
      IF IN_PD_CODE = 'PAY' THEN
         SELECT GRAD_BASE_AMT
           INTO IS_RETURN
           FROM QX200MS
          WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
      ELSIF IN_PD_CODE = 'A17' THEN
          SELECT GRAD_CAR
            INTO IS_RETURN
            FROM QX200MS
           WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
      ELSIF IN_PD_CODE = 'A10' THEN
          SELECT GRAD_OT
            INTO IS_RETURN
            FROM QX200MS
           WHERE JIKG_CODE = IN_JIKG_CODE AND GRAD_CD = IN_HOBONG;
      ELSE IS_RETURN := 0;
      END IF;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
               IS_RETURN :=0;
    END FUNC_GET_AMT;