45

如何使用 Oracle SQL Developer 将列设置为自动递增?为什么表格被禁用?

甲骨文 SQL 开发人员

注意:图像显示了数据建模器,但问题和最佳答案谈论的是编辑现有数据库。

4

8 回答 8

94

如果要使 PK 自动递增,则需要为该主键设置 ID 列属性。

  1. 右键单击表格并选择“编辑”。
  2. 在“编辑”表窗口中,选择“列”,然后选择您的 PK 列。
  3. 转到 ID 列选项卡并选择列序列作为类型​​。这将创建一个触发器和一个序列,并将序列与主键相关联。

请参阅下图以更好地理解。

在此处输入图像描述

// 我的来源是:http ://techatplay.wordpress.com/2013/11/22/oracle-sql-developer-create-auto-incrementing-primary-key/

于 2014-12-11T22:31:47.073 回答
28

不幸的是,oracle 不像 mysql 那样支持 auto_increment。你需要付出一些额外的努力才能做到这一点。

说这是你的桌子 -

CREATE TABLE MYTABLE (
  ID NUMBER NOT NULL,
  NAME VARCHAR2(100)
  CONSTRAINT "PK1" PRIMARY KEY (ID)
);

您将需要创建一个序列 -

CREATE SEQUENCE S_MYTABLE
START WITH 1
INCREMENT BY 1
CACHE 10;

和一个触发器——

CREATE OR REPLACE TRIGGER T_MYTABLE_ID
BEFORE INSERT
ON MYTABLE
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
  if(:new.ID is null) then
  SELECT S_MYTABLE.nextval
  INTO :new.ID
  FROM dual;
  end if;
END;
/

ALTER TRIGGER "T_MYTABLE_ID" ENABLE;
于 2012-06-12T04:19:47.503 回答
6

您可以在 SQL Modeler 中进行自动增量。在列属性窗口中单击:常规,然后勾选自动增量框。之后,将为您启用自动增量窗口。

于 2013-03-11T15:33:39.137 回答
3

@tom-studee 你是对的,可以在数据建模器中做到这一点。

双击您的表格,然后转到列部分。在这里双击将具有自动增量的列。在一般部分有一个复选框“自动增量”,只需勾选它。

之后,您还可以转到“自动增量”部分对其进行自定义。

当您保存它并要求数据建模器生成 SQL 脚本时,您将看到代表您的自动增量的序列和触发器。

于 2015-05-07T06:37:32.997 回答
3

更新:在 Oracle 12c 以后,我们可以选择创建自动增量字段,它比触发器和序列更好。

  • 右键单击表格并选择“编辑”。
  • 在“编辑”表窗口中,选择“列”,然后选择您的 PK 列。
  • 转到身份列选项卡并选择“生成为身份”作为类型,将 1 放在开头和增量字段中。这将使该列自动递增。

见下图

在此处输入图像描述

从 SQL 语句

IDENTITY 列现在在 Oracle 12c 上可用:

 create table t1 (
     c1 NUMBER GENERATED by default on null as IDENTITY,
     c2 VARCHAR2(10)
     );

或指定起始值和增量值,同时防止任何插入标识列(始终生成)(同样,仅限 Oracle 12c+)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

编辑:如果您遇到任何错误,例如“ORA-30673:要修改的列不是标识列”,那么您需要创建新列并删除旧列。

于 2018-08-30T06:24:09.940 回答
2

我发现这篇文章看起来有点旧,但我想我会向大家更新我的新发现。

我在 Windows 上使用 Oracle SQL Developer 4.0.2.15。我们的数据库是在 Windows 上运行的 Oracle 10g(版本 10.2.0.1)。

要在 Oracle 中使列自动递增 -

  1. 在 Connections 选项卡中打开数据库连接
  2. 展开 Tables 部分,右键单击要更改为自动递增的列的表,然后选择 Edit...
  3. 选择列部分,然后选择要自动递增的列(主键列)
  4. 接下来,单击列列表下方的“标识列”部分,并将类型从无更改为“列序列”
  5. 保留默认设置(或者如果您愿意,可以更改序列和触发器的名称),然后单击确定

您的 id 列(主键)现在将自动递增,但序列将从 1 开始。如果您需要将 id 递增到某个点,则必须针对该序列运行一些 alter 语句。
这篇文章有更多细节以及如何克服这个问题。

我在这里找到了解决方案

于 2014-11-07T15:58:58.363 回答
1

Oracle 没有自动递增列。您需要一个序列和一个触发器。这是一篇解释如何做到这一点的随机博客文章:http ://www.lifeaftercoffee.com/2006/02/17/how-to-create-auto-increment-columns-in-oracle/

于 2012-06-12T04:09:30.433 回答
1

如何使用 Oracle SQL Developer 执行此操作:在左侧窗格中,您将在连接下找到“序列”,右键单击并从上下文相关弹出窗口中选择创建新序列。填写详细信息:模式名称、序列名称、属性(以值开头、最小值、最大值、增量值等),然后单击确定。假设您有一个带有使用此 auto_increment 的键的表,在此表中插入时,只需在使用此属性的字段中提供“your_sequence_name.nextval”。我想这应该有帮助!:)

于 2012-08-16T09:51:14.060 回答