2017-04-21 11 views
0

Oracle 데이터베이스와 TOAD가 처음입니다. TOAD에서이 함수 GET_WRKFLW_LICENSE_LIMIT을 실행하고 출력을 확인해야합니다.수동 매개 변수 값을 전달하여 Toad를 사용하여 ORACLE에서 SQL 함수의 출력을 보는 방법

매개 변수 값은 다음과 같습니다

다음 아래
GET_WRKFLW_LICENSE_LIMIT('MSG_FORMAT', 1, NULL, NULL) 

, 내 코드를 부착했다.

CREATE OR REPLACE FUNCTION MYSCHEMA.GET_WRKFLW_LICENSE_LIMIT (
    WRK_TYPE IN VARCHAR2, VCLIENT_ID IN NUMBER, VCP_ID IN NUMBER, VREQ_TYPE IN VARCHAR2) 
    RETURN BOOLEAN 
IS 
    RESULT     BOOLEAN; 
    vWRK_FLW_LIST_COUNT  NUMBER (5); 
    vWRK_FLW_LICENCE_LIMIT NUMBER (5); 
BEGIN 
     IF (WRK_TYPE = 'MSG_FORMAT') THEN 
     SELECT COUNT (*) 
     INTO vWRK_FLW_LIST_COUNT 
     FROM (SELECT MSG_TMPL_ID 
       FROM MYSCHEMA.VW_MSG_TMPL_FORMAT 
       WHERE  NVL (CLIENT_ID, 1) = NVL (VCLIENT_ID, 1) 
        AND NVL (CP_ID, 1) = NVL (VCP_ID, 1)); 
     BEGIN 
     SELECT TO_NUMBER (PARAM_VALUE) 
      INTO vWRK_FLW_LICENCE_LIMIT 
      FROM CONFIG.ENV_PARAMS 
      WHERE PARAM_NAME = 'TT_MSG_TMPL_THRESHOLD'; 
     IF  vWRK_FLW_LICENCE_LIMIT IS NOT NULL 
      AND (vWRK_FLW_LIST_COUNT <= vWRK_FLW_LICENCE_LIMIT) THEN 
      RESULT := TRUE; 
     ELSIF vWRK_FLW_LICENCE_LIMIT IS NULL THEN 
      RESULT := TRUE; 
     ELSE 
      RESULT := FALSE; 
     END IF; 
     EXCEPTION 
     WHEN OTHERS THEN 
      RESULT := FALSE; 
      RETURN RESULT; 
    END; 
    EXCEPTION 
     WHEN OTHERS THEN 
      RESULT := FALSE; 
      RETURN RESULT; 
    END; 
    /

답변

0

두 가지 주요 문제점이 있습니다.

첫 번째는 예외 블록에서만 RETURN RESULT를 실행한다는 것입니다. 따라서 컴파일 할 때 실행시 런타임에 PLS-06503: Function returned without value으로 실행됩니다. 따라서 마지막 예외 블록 앞에 RETURN RESULT를 추가해야합니다.

  .... 
    END; 
    RETURN RESULT; 
EXCEPTION 
    WHEN OTHERS .... 

다른 문제는 부울을 반환한다는 것입니다. 즉, SQL로 실행할 수 없다는 뜻입니다 : ORA-00902: Invalid datatype을 던집니다.

그래서 당신은 익명 PL/SQL 블록과 두꺼비이를 테스트 할 수 있습니다

begin 
    if GET_WRKFLW_LICENSE_LIMIT (
      WRK_TYPE => 'MSG_FORMAT', 
      VCLIENT_ID => 1, 
      VCP_ID => null, 
      VREQ_TYPE => null) 
    then 
     dbms_output.put_line('True!'); 
    else 
     dbms_output.put_line('False!'); 
    end if; 
end; 

는 사용자가 원하는 설정되어 있지 않은 경우 TOAD에서 DBMS_OUTPUT 수 있도록해야합니다.

또는 SQL에서 지원되는 데이터 유형을 사용하도록 쿼리를 다시 작성할 수도 있습니다. 예 : varchar2.

+0

감사합니다. ** APC ** –

+0

감사합니다. [APC] (http://stackoverflow.com/users/146325/apc). 미안해. –

+0

반갑습니다. – APC