Oracle PL/SQL의 User Function에서 Boolean Return
Oracle 2010. 9. 10. 16:09Q> User Function으로 Boolean이 반환되는 것을 하나 만들었습니다.
이 Function을 SELECT구문에서 직접 사용하고 싶은데 안됩니다. 이를 해결할 수 있는 방법이 없을까요?
A> 먼저 결론부터 알려드린다면, "없습니다."
아래와 같이 예시를 위해서 Function을 생성하고, 이 Function을 호출해봅니다.
create or replace
function test_boolean ( p_val in number ) return boolean is
begin
if p_val > 1 then
return TRUE;
else
return FALSE;
end if;
end;
/
-- Boolean 값을 반환하는 Function을 SELECT구문에서 사용해봅니다.
select test_boolean(1) from dual;
위와 같이 실행해보면 아래와 같은 Oracle Error Message를 접하시게 됩니다.
ORA-06553: PLS-382: 식이 잘못된 유형입니다
SELECT문에서는 Boolean을 반환하는 Function 자체를 아예 인지하는 못하는듯한 메세지가 나타납니다.
이에 대한 방법이 있을까 하여, Ask Tom Site를 찾아보았습니다.
많은 논쟁이 있었지만, 아래의 답변으로 정리는 될듯 합니다.
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6263249199595
결론적으로, Function의 Return값으로 Boolean을 사용하기 보다는, Number or Character Type으로 변환시켜서
Return하도록 하는 것이 바람직하다 하겠습니다.
create or replace
function test_boolean ( p_val in number ) return number is
begin
-- 0보다 큰 값을 True로 인지 (이 부분의 Logic은 원하는 대로 코딩하시면 될듯)
if p_val > 0 then
return 1;
else
return 0;
end if;
end;
/
-- 기존에 존재하는 Boolean을 반환하는 Function을 다른 Function에서 호출하도록 우회하는 방법
create or replace
function test_character ( p_val in number ) return varchar2 is
begin
if test_boolean(1) = true then
return 'TRUE';
else
return 'FALSE';
end if;
end;
/
'Oracle' 카테고리의 다른 글
| UGA MEMORY LEAK 에러인 ORA-600[729] ERROR에 대한 이해 (0) | 2010.09.20 |
|---|---|
| 인증되지 않은 TOOLS 의 ACCESS 제한하기 (1) | 2010.09.16 |
| DISTINCT May Remove Sorting From Pre-Sorted Data (0) | 2010.09.10 |
| Group By와 Distinct의 차이가 뭘까? (0) | 2010.09.10 |
| Silent Installation을 통한 Oracle Embedding (0) | 2010.08.16 |
