programing

"식 유형이 잘못됨"에서 부울 반환 함수가 실패함

i4 2023. 7. 30. 17:03
반응형

"식 유형이 잘못됨"에서 부울 반환 함수가 실패함

나는 오라클 11g를 사용하고 있는데 내 문제가 어디에 있는지 이해할 수 없습니다.저는 훨씬 더 어려운 것을 만들었지만 지난 5시간 동안 이 간단한 것에서 실패했습니다.

이것은 기능 본체입니다.

FUNCTION legal_user(
     level_existance  number
    ,types_with_impel number)
RETURN BOOLEAN
 IS
 v_ret_val BOOLEAN;
 BEGIN
   v_ret_val := FALSE;
   IF (level_existance*types_with_impel>0) then 
     v_ret_val := TRUE;
     DBMS_OUTPUT.PUT_LINE('true');
   else 
     DBMS_OUTPUT.PUT_LINE('false');
   END IF;       
  return v_ret_val;
END legal_user;

사양은 다음과 같습니다.

FUNCTION legal_user(
       level_existance number
       ,types_with_impel number)
   RETURN BOOLEAN;

그것은 논리적이고 동등합니다.

         A*B>0?true:false;   

다음 오류 메시지가 표시됩니다.

ORA-06552: PL/SQL: 문이 무시됨 ORA-06553: PLS-382: 식의 유형 06552가 잘못되었습니다.00000 - "PL/SQL: %s" *원인:
*조치:라인: 1 열: 7에서의 오류


이것이 내 IDE에서 실행하는 방법입니다.

 SELECT compt_tree_profile_q.legal_user(1,1)
 FROM dual 

PureSQL은 부울 형식(버전 23c까지)을 인식하지 않지만 PL/SQL은 인식합니다.그래서 당신의 쿼리는 이 함수가 반환하는 데이터 유형을 알지 못합니다.

이 기능은 작동하므로 다른 pl/sql 블록을 사용할 수 있습니다.

declare
myvar boolean;
begin
   myvar := compt_tree_profile_q.legal_user(1,1);
end;

그러나 순수 선택 문에서는 이 함수를 사용할 수 없습니다.

함수가 부울을 반환합니다.이 데이터 유형은 PL/SQL에 알려져 있지만 SQL 쿼리를 사용하고 있습니다.SQL은 부울을 처리하는 방법을 알지 못하며 "식의 유형이 잘못되었습니다."라고 말합니다.

안부 전해요,

SQL 내에서 이 기능을 호출하는 경우 자체 기능을 롤링하는 대신 내장된 SIGN 기능을 사용할 수 있습니다.

함수는 파라미터의 부호(각각 음수, 0 또는 양수)에 따라 -1, 0 또는 1을 반환합니다.

사용 방법은 다음과 같습니다.

SIGN(level_existance*types_with_impel)

그리고 이를 CASE 문으로 변환하는 방법:

SELECT CASE WHEN (SIGN(level_existance*types_with_impel) = 1)
            THEN 'TRUE'
            ELSE 'FALSE'
       END legal_user
FROM ...

이 경우 문자열('TRUE' 또는 'FALSE')을 반환하지만 SELECT 문(열, SYSDATE 등) 내에서 유효한 모든 항목을 반환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5260238/function-returning-boolean-fails-on-expression-is-of-wrong-type

반응형