从Oracle函数返回布尔值

8
尝试从函数返回值
create or replace function compairenumber(num1 in number,num2 in number)
return boolean is
begin
if num1 < num2 then
return true;
else 
return false;
end if;
end;

当我执行查询语句

select compairenumber(5,10) from dual

它没有返回真或假。

2个回答

11

布尔值只能在其他PL/SQL代码中使用,不能在Oracle SQL中使用。如果您想要一个函数的返回值在select ... from dual中可用,那么您需要定义该函数返回varchar2,其返回值分别为'true''false'(或'T''F',或返回数字,其值为1和0)。

尽管编程语言PL/SQL支持Boolean数据类型,但遗憾的是,Oracle SQL不支持它。


这意味着我应该写出类似以下的代码: create or replace function compairenumber(num1 in number,num2 in number) return varchar is begin if num1 < num2 then return 'T'; else return 'F'; end if; end; - ashish
@ashish - 没错。除此之外,在Oracle中最好(目前)使用varchar2数据类型,而不是varchar - user5683823
我更喜欢这个答案,因为它解释了为什么在那种情况下不能使用布尔值。 - BriteSponge
现在,在 Oracle 的 23c 版本中已经发生了变化。它现在支持布尔数据类型,并且 to_boolean 函数可以将 varchar、int 转换为布尔数据类型。https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/to_boolean.html#GUID-B4FA8F5F-DD2A-4BEA-946A-B3CA60509294 - Atif

5

使用return varchar2

create or replace function compairenumber(num1 in number, num2 in number)
  return varchar2 is
begin
  if num1 < num2 then
    return 'TRUE';
  else
    return 'FALSE';
  end if;
end;


select CASE
         WHEN compairenumber(5, 10) = 'TRUE' THEN
          'OK'
         ELSE
          'NOT'
       END
  from dual

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接