无法更新触发器中的其他架构表

时间:2016-06-06 16:49:25

标签: plsql plsqldeveloper

我想通过触发器更新其他架构表。当我从scott模式创建触发器时它工作正常,但在系统模式中遇到以下错误。

Error(3,14): PL/SQL: ORA-01031: insufficient privileges

create or replace trigger trig_tt_1
after update on system.table1
begin

update scott.table1 a
set (a.col3,a.col4,a.col5) = (select b.col3,b.col4,b.col5 
                                  from system.table1 b 
                                  where b.col1= a.col1);

end;

for information, when i execute the update script alone its working fine.

2 个答案:

答案 0 :(得分:0)

在您尝试从不同架构访问的对象上缺少GRANT

试试这个:

1.登录SCOTT架构。

2.给GRANT ALL on scott.table1 to SYSTEM

3.登录SYSTEM架构并再次创建触发器。

  

经过测试:

没有拨款 - 遇到错误

image 1

提供赠款

Image 2

创建没有错误的触发器

Image 3

答案 1 :(得分:0)

只有当您没有CREATE ANY TRIGGER priv时才会出现此错误。由于您已成功在SCOTT模式中创建了TRIGGER,但在尝试在SYSTEM模式中创建TRIGGER时,您将面临“INSUFFICIENT PRIV”错误。 有两种方法可以解决此问题。

<强>推荐

  1. 登录到SYSTEM架构,然后尝试CREATE触发器。在这种情况下,您尝试从SCOTT Schema创建触发器。
  2. 不推荐

    1. GRANT CREATE ANY TRIGGER TO SCOTT - &gt;这将使您能够在任何架构中创建TRIGGER。但这个强烈不推荐。这些权利应仅由DBA保留,而不是开发人员。
    2. 希望这有帮助。