"식 유형이 잘못됨"에서 부울 반환 함수가 실패함
나는 오라클 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
'programing' 카테고리의 다른 글
JQuery의 파일 입력에서 데이터 가져오기 (0) | 2023.07.30 |
---|---|
java System.currentTimeMillis()에 해당하는 Oracle? (0) | 2023.07.30 |
운영 환경에서 MemoryStore 사용 (0) | 2023.07.30 |
MariaDB: 원격 액세스에서 액세스가 거부되었지만 사용 권한이 있어야 합니다. (0) | 2023.07.30 |
DOM의 특정 요소에서 HTML+CSS+JS를 선택적으로 복사하는 도구 (0) | 2023.07.30 |