语法错误 - Oracle APEX - apex_authorization.is_authorized 函数

问题描述 投票:0回答:1

我正在 Apex 中进行开发,使用自定义身份验证并使用 apex 内置 acl(访问控制列表)。

我的自定义身份验证工作正常。 尊敬的授权:

1 - 创建新用户并添加角色工作正常。 2 - 现在我想在登录页面创建一个进程来获取用户的角色并设置是否被授权。 3 - 我正在使用下面的代码,但出现下面的错误。

你能帮我理解这个语法有什么问题吗?

我开始对此感到绝望。

declare 

l_is_admin BOOLEAN :=false;

function "APEX_AUTHORIZATION.IS_AUTHORIZED"(
    p_authorization_name IN VARCHAR2 )
    RETURN BOOLEAN;

begin

l_is_admin := apex_acl.has_user_role (
    p_application_id => 100,
    p_user_name => :P9999_USERNAME,
    p_role_static_id => ('ADMINISTRATOR')
);

if l_is_admin then
apex_authorization.is_authorized (
    p_authorization_name => 'Administration Rights' )
return true;
end if;

end;

这是错误: ORA-06550:第 20 行,第 1 列:PLS-00103:在期望以下其中一项时遇到符号“RETURN”: := 。 (%;

oracle plsql oracle-apex
1个回答
0
投票

大量语法错误导致代码无法编译,例如

  • declare
    完全是多余的;变量应该在函数代码中声明
  • 缺少分号(作为语句终止符)
  • 函数必须返回某物;您只返回
    true
    ,但是 - 如果 l_is_admin 为 false 该怎么办?函数不会返回任何内容。
  • 虽然这不是一个错误,但我建议您在使用 Oracle 时忘记双引号

我并不是说这段代码会按照你想要的方式工作,但它至少应该可以编译(如果 Apex 内置函数的调用是正确的)。

function APEX_AUTHORIZATION.IS_AUTHORIZED 
  (p_authorization_name IN VARCHAR2)
RETURN BOOLEAN
is
  l_is_admin BOOLEAN := false;
begin
  l_is_admin := apex_acl.has_user_role 
  ( p_application_id => 100,
    p_user_name => :P9999_USERNAME,
    p_role_static_id => ('ADMINISTRATOR')
   );

  if l_is_admin then
     apex_authorization.is_authorized 
       (p_authorization_name => 'Administration Rights');
     return true;
  else
     return false;
  end if;
end;
© www.soinside.com 2019 - 2024. All rights reserved.