有没有办法创建SYS拥有的触发器或者解决方案是什么

时间:2017-08-13 07:55:08

标签: oracle plsql oracle11g triggers

我遇到了创建触发器的问题我正在附上我的cmd照片

enter image description here

这是我的代码

CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customers 
FOR EACH ROW
WHEN (NEW.ID > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff := :NEW.salary - :OLD.salary;
    dbms_output.put_line('Old salary ' || :OLD.salary);
    dbms_output.put_line('New salary ' || :NEW.salary);
    dbms_output.put_line('Salary difference ' || :sal_diff);
END;
/

错误

  

ORA-04089:无法在SYS拥有的对象上创建触发器

这可能是什么解决方案或我现在要做什么请给我一些建议

1 个答案:

答案 0 :(得分:1)

我认为您的客户表是由SYS用户创建的。

使用类似' MY_USER'的sys创建用户连接它然后使用MY_USER创建您的客户表。并尝试创建您的触发器。删除sys.customer表。

  

此帐户可以执行所有管理功能。所有基地   (基础)数据库数据字典的表和视图   存储在SYS模式中。这些基表和视图是至关重要的   Oracle数据库的操作。保持完整性   在数据字典中,SYS模式中的表只能由   数据库。任何用户或数据库都不应修改它们   管理员。您不能在SYS模式中创建任何表。

根据:https://docs.oracle.com/database/121/ADMQS/GUID-CF1CD853-AF15-41EC-BC80-61918C73FDB5.htm#ADMQS12003