【问题标题】:I want to auto increment a column and make it as a primary key in oracle10g. But on trigger creation I get an error我想自动增加一列并将其作为 oracle 10g 中的主键。按钮触发器创建我收到错误
【发布时间】:2014-03-06 13:50:48
【问题描述】:

我为表创建了一个序列,在创建触发器时出现以下错误:

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

谁能解释一下它是什么以及如何解决?由于我是初学者,有没有简单的方法来解决它? 我的表名正在测试中。

create sequence example_seq 
start with 1
increment by 1
nomaxvalue;

create trigger example_trigger
before insert on testing
for each row
begin
select example_seq.nextval into :new.id from dual;
end;

【问题讨论】:

  • testing的所有者是谁?做一个select * from user_tables,你对这张桌子有什么看法?

标签: oracle triggers oracle10g sequence


【解决方案1】:

错误信息很清楚:

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

很明显,您以 SYS 身份登录,并在该用户的模式中创建对象。你不能这样做。 SYS 是拥有数据字典和管理数据库的所有对象的用户。更改 SYS 模式充其量是不好的做法,并且存在损坏数据库的风险。 Find out more.

您需要为您的应用程序对象创建一个新用户。这很简单。以 SYSTEM 身份连接(避免使用 SYS 执行琐碎的任务):

create user your_name_here identified by << password >>
/

grant create session, create table, create sequence, create trigger
     to your_name_here
/

显然您需要授予更多权限。完整列表是in the documentation

创建新用户后,您可以连接到它并创建您想要的所有对象。

【讨论】:

  • 我进入管理选项并创建了一个新用户,提供了新密码和新用户名。然后授予它所有权限,并将新用户设置为 DBA。然后从 sys 注销并使用新用户登录。我成功地创建了触发器,没有任何错误。如果我继续在我的所有数据库活动中使用这个新用户,可以吗?
  • 当然,为什么不呢?
猜你喜欢
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2023-04-01
  • 1970-01-01
  • 2014-04-03
  • 2012-11-04
  • 2015-09-01
相关资源
最近更新 更多