我想用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用户的记录。但是当我运行这段代码时,出现了以下错误。
我该如何解决这个问题?
你已经定义了一个变量 userrole
使用 %rowtype
语法。这意味着变量与 投影 的USER_ROLE表。然而,你选择的是一个字面的 1
而不是列,所以查询的投影与目标变量不匹配。
要么将目标变量改为简单的数字类型,要么将查询改为 select * from user_role
.
顺便说一下,你的WHERE子句是错误的:而不是 role_id = role_id
你应该编入 role_id = roleid
.
我想... roleid
对于一个局部变量来说是一个很糟糕的名字,因为它和列名太相似了,所以很容易出错:使用前缀的习惯,如 l_
突出显示局部变量(或其缺失)。