我需要知道一个角色是否对Oracle对象有特权。
我写了以下函数:
create or replace FUNCTION HasPrivilegeOnObject
(RoleName in varchar2
, ObjectName in varchar2
, ObjectOwner in varchar2
, PrivilegeName in varchar2)
RETURN NUMBER
AS
Output number;
BEGIN
select count(*) into Output
from DBA_TAB_PRIVS
where
GRANTEE = RoleName and
OWNER = ObjectOwner and
TABLE_NAME = ObjectName and
Privilege = PrivilegeName;
if Output > 0 then
Output := 1;
end if;
return Output;
END HasPrivilegeOnObject;
函数编译但是,当我执行它时,它不会返回正确的结果。
对于某个角色和一个对象,当我检查变量Output INSIDE 的值时,它位于 1 。但是当我从另一个函数检查时,它是 0 。
摘要:
call dbms_output.put_line(HasPrivilegeOnObject(Role1, Table1, User1, 'SELECT'))
返回1;
在另一个PL / SQL函数中:
HasPrivilegeOnObject(Role1, Table1, User1, 'SELECT')
返回0.
有没有人对这个问题有所了解?