【问题标题】:Trying to auto-increment in Oracle 11g尝试在 Oracle 11g 中自动递增
【发布时间】:2017-07-01 20:34:33
【问题描述】:

我正在尝试为表创建一个自动递增的主键,但我没有运气。这是在 Oracle 11g 中,我严重错过了 MySQL 自动增量命令。 PrimkeyID 是我试图用作主键的列。这是一个多对多关系的相交表。无论如何,错误表明我在主键括号的开头缺少一个关键字。此外,我没有执行触发器所需的权限级别,这对于在 Oracle 中递增似乎很重要。

create table SITE_JUNC
(
primkeyID number,
FKsuperpave varchar(30),
FKcont_mix varchar(30),
)
;
alter table site_junc 
add constraint primary key(create sequence primkeyID incement by 1),

add constraint FKsuperpave foreign key(mix_id_superpave)
references SMGR_CONT_MIX(ContMix),

add constraint FKcont_mix foreign key(mix_id_cont_mix)
references SUPERPAVE(SuperMix)

【问题讨论】:

  • Auto Increment for Oracle的可能重复
  • @a_horse_with_no_name 是的,我只是在一分钟前看过那篇帖子,我没有能力做触发器。我是一名分析师,我没有特权级别。
  • 那么您在 Oracle 11 中运气不佳,但如果您可以创建表,通常也可以创建触发器。当您尝试创建触发器时会发生什么?
  • 当我尝试在我刚刚创建的表上创建触发器时,我收到错误消息 ORA-01031:权限不足。
  • 我只是按照上面提到的 Oracle 自动增量帖子中概述的相同步骤

标签: oracle11g primary-key


【解决方案1】:

首先,序列是与表分离的对象。 您必须先创建序列,然后再创建表(不一定按此顺序)。

Create sequence seq_table;

然后,在插入语句中,使用 seq_table.nextval(或使用触发器)。 如果你不喜欢这个解决方案,你可以使用 GUID(我个人不喜欢它):

create table SITE_JUNC
(primkey number RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
....)

从 Oracle 12c 开始,您有 Identity 列。

【讨论】:

  • 在雷纳托·阿方索,这是有道理的,谢谢你试一试
  • 我会推荐 GUID 上的序列
猜你喜欢
  • 2014-01-06
  • 2016-08-09
  • 2016-01-07
  • 2017-05-21
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
相关资源
最近更新 更多