函数返回布尔值失败"表达式类型错误"

yoa*_*str 14 oracle plsql oracle11g ora-06553

我正在使用oracle 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;
Run Code Online (Sandbox Code Playgroud)

这是规范:

FUNCTION legal_user(
       level_existance number
       ,types_with_impel number)
   RETURN BOOLEAN;
Run Code Online (Sandbox Code Playgroud)

这符合逻辑和对等

         A*B>0?true:false;   
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是

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 
Run Code Online (Sandbox Code Playgroud)

Mic*_*ton 24

尽管PL/SQL有,但纯SQL无法识别布尔类型.所以你的查询不知道这个函数返回什么数据类型..

该函数有效,因此您可以在另一个pl/sql块中使用

declare
myvar boolean;
begin
   myvar := compt_tree_profile_q.legal_user(1,1);
end;
Run Code Online (Sandbox Code Playgroud)

但是您不能在纯select语句中使用此函数.


Rob*_*ijk 17

你的函数返回一个布尔值.此数据类型是PL/SQL已知的,但您使用的是SQL查询.SQL不知道如何处理布尔值,并说"表达式是错误的类型".

问候,
Rob.