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语句中使用此函数.