Oracle 合并报告:ORA-28138:指定的策略谓词无效
执行合并语句时:Oracle 合并报告:ORA-28138:指定的策略谓词无效,oracle,merge,audit,auditing,Oracle,Merge,Audit,Auditing,执行合并语句时: merge into employees e using new_employees n on (e.employee_id = n.employee_id) when matched then update set e.salary = n.salary when not matched then insert (employee_id,first_name,last_name,email,phone_number,hire_date, job_id,s
merge into employees e using new_employees n
on (e.employee_id = n.employee_id)
when matched then
update set e.salary = n.salary
when not matched then
insert (employee_id,first_name,last_name,email,phone_number,hire_date,
job_id,salary,commission_pct,manager_id,department_id)
values (n.employee_id,n.first_name,n.last_name,n.email,n.phone_number,
n.hire_date,n.job_id,n.salary,n.commission_pct,n.manager_id,
n.department_id);
它报告:ORA-28138:指定了无效的策略谓词。
我怎么了
我发现此错误是由细粒度审核引起的。我以前创建过一个策略,如下所示:
DBMS_FGA.add_policy (object_schema => 'primer',
object_name => 'employees',
policy_name => 'audit_policy',
audit_condition => 'employee_id = 100',
audit_column => 'phone_number,salary',
handler_schema => 'primer',
handler_module => 'FGA_SEND_MAIL(primer,employees,audit_policy)',
ENABLE => TRUE,
statement_types => 'select,insert,update,delete',
audit_trail => DBMS_FGA.db_extended,
audit_column_opts => DBMS_FGA.any_columns);
create or replace procedure primer.fga_send_mail (p_schema in varchar2,
p_obj in varchar2,
p_pol in varchar2)
as
begin
dbms_output.put_line ('Audit Trail Generated');
dbms_output.put_line ('SQL=' || sys_context ('USERENV', 'CURRENT_SQL'));
dbms_output.put_line ('USER' || sys_context ('USERENV', 'SESSION_USER'));
结束
有什么问题吗?您的员工表上是否应用了VPD策略。您可以通过运行以下查询select*from user_Policys来检查这一点,其中object_name='EMPLOYEES'我执行了该语句,它报告无。我发现prceeding语句可以作为用户
sys
执行。合并是否需要特殊权限?您是否有更新授权?employees表在其自己的架构中。您的employees表上是否应用了VPD策略。您可以通过运行以下查询select*from user_Policys来检查这一点,其中object_name='EMPLOYEES'我执行了该语句,它报告none。我发现prceceding语句可以作为usersys
执行。合并是否需要特权?您是否拥有更新授权?EMPLOYEES表在其自己的架构中。