如何编写返回类型为boolean的用户授权的plsql代码?

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

我想用plsql函数实现用户认证。

DECLARE
roleId RAW(16);
userRole User_Role%ROWTYPE;
BEGIN
    select role_id
    into roleId
    from role
    where role_name='guest';
    BEGIN
        select 1
        into userRole
        from   user_role
        where  user_id = :APP_USER 
        and role_id = role_id;
        return true;
        exception when no_data_found
        then return false;
    END;
END;

通过上面的代码,我想得到客人角色的'role_id',然后尝试在'user_role'连接表中找到一个带有该角色id和app用户的记录。但是当我运行这段代码时,出现了以下错误。enter image description here

我该如何解决这个问题?

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

你已经定义了一个变量 userrole 使用 %rowtype 语法。这意味着变量与 投影 的USER_ROLE表。然而,你选择的是一个字面的 1 而不是列,所以查询的投影与目标变量不匹配。

要么将目标变量改为简单的数字类型,要么将查询改为 select * from user_role.

顺便说一下,你的WHERE子句是错误的:而不是 role_id = role_id 你应该编入 role_id = roleid.

我想... roleid 对于一个局部变量来说是一个很糟糕的名字,因为它和列名太相似了,所以很容易出错:使用前缀的习惯,如 l_ 突出显示局部变量(或其缺失)。

© www.soinside.com 2019 - 2024. All rights reserved.