无法在SYS问题所拥有的对象上创建触发器

时间:2017-04-23 22:19:00

标签: sql oracle plsql oracle12c

我从第一张图片中的sql plus用户(不是sys)登录并从oracle sql developer运行触发器,但它在第二张图片中给出了错误。

enter image description here

ORA-04089: cannot create triggers on objects owned by SYS

enter image description here

我使用的是Oracle 12c并且不确定我的触发器代码是否完全正确。我的目的是在有人尝试添加相同的ogrenci_no(student_number)时显示警告。我能为此做些什么?

1 个答案:

答案 0 :(得分:1)

如果您向该用户授予了SYSDBA权限,那么您间接使用SYS帐户。这是一个关于如何创建一个简单用户来存储表格的小视频。

https://www.youtube.com/watch?v=WDJacg0NuLo

现在,触发你的触发器。您通常不会在触发器中发出回滚(或提交),因为它可能是更大事务的一部分。你想要做的是引发一个错误,它将放弃触发触发器的语句,例如

if :new.col = :old.col then
  raise_application_error(-20000,'You did not change the value');
end if;

但是,当然,这不适用于你的情况,因为你正在捕获一个INSERT语句,因此 no ' old'值。我认为你的意图在表中没有任何重复...所以你不需要(或想要)一个触发器,你需要一个独特的约束,例如

alter table MY_TABLE add constraint MY_TABLE_UQ unique ( ogrenci_no) ;

这将防止重复被允许。