【发布时间】:2023-04-01 03:11:02
【问题描述】:
执行代码时出现以下错误
create or replace
function contact_restriction_function(obj_schema varchar2, obj_name varchar2)
return varchar2 is
v_contact_info_visible hr_user_access.contact_info_visible%type;
begin
-- Here you can put any business logic for filtering
select nvl(max(contact_info_visible),'N')
into v_contact_info_visible
from hr_user_access
where user_name = user;
-- SQL filter / policy predicate
return ''''||v_contact_info_visible||''' = ''Y'' ';
end;
/
在显示错误命令后我得到了这个
显示错误 FUNCTION CONTACT_RESTRICTION 的错误: LINE/COL 错误 -------- ------------------------------------------ ---------------------- 3/1 PLS-00103:遇到符号“?”当期待其中之一 下列的: 开始函数杂注过程子类型类型 当前光标删除 存在先前的外部语言这是剩下的代码:
begin
dbms_rls.add_policy(object_schema => 'HR' ,
object_name => 'EMPLOYEES' ,
policy_name => 'Contact_Restriction_Policy' ,
policy_function => 'contact_restriction_function' ,
sec_relevant_cols=>'EMAIL,PHONE_NUMBER'Contact Info ,
sec_relevant_cols_opt=>dbms_rls.all_rows);
end;
下面是我在显示错误之前执行的实际代码:
create or replace function contact_restriction(obj_schema varchar2, obj_name varchar2)
return varchar2
is
v_contact_info_visible IN user_access.contact_info_visible%type;
begin
select nvl(max(contact_info_visible),'N')
into v_contact_info_visible
from user_access where username = user;
return 'v_contact-info_visible ='|| 'Y';
end;
【问题讨论】:
-
因为没有“?”您发布的代码中的字符我发现很难诊断这个问题。也许还有一些其他代码没有包含在内?
-
这是剩下的代码
-
您已显示
contact_restriction_function的代码,但错误是CONTACT_RESTRICTION。请在调用show errors之前立即显示您实际执行的代码。 -
在您的评论(上面)中提到的对
DBMS_RLS.ADD_POLICY的调用中,您传递了policy_function => 'contact_restriction_function'- 但是因为Oracle 中未加引号的标识符默认为大写,所以这应该是policy_function => 'CONTACT_RESTRICTION_FUNCTION'。这可能不是此问题的根源,但将来可能会有所帮助。分享和享受。 -
@user3391904 - 请在问题中输入代码,而不是在 cmets 中。这仍然没有给出
"?"的错误消息;但它会在v_contact_info_visible的声明中抱怨IN。不知道为什么你从你复制的样本中剥离了报价处理;您还将下划线更改为连字符,这将导致另一个错误。