当前位置: 首页 > 面试题库 >

如何在Oracle上使用AUTO_INCREMENT创建ID?

邹高懿
2023-03-14
问题内容

直到11g版本(包括11g),Oracle中似乎都没有AUTO_INCREMENT的概念。

如何在Oracle 11g中创建行为类似于自动增量的列?


问题答案:

表定义:

CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));

CREATE SEQUENCE dept_seq START WITH 1;

触发定义:

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

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

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

或指定起始值和增量值,也防止任何插入到标识列(GENERATED ALWAYS)中(同样,仅适用于Oracle 12c +)

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

另外,Oracle 12还允许使用序列作为默认值:

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID));


 类似资料:
  • 问题内容: 我想创建一个上下文增量,不确定我使用的术语是否正确。这是我的桌子 在这之后我做了 在MyISAM注意页面上给出的示例中,他们没有提供示例,该示例使用enum,这里我没有使用enum,但是他们没有提到它仅适用于enum。但是我得到的输出是 但我想这样 有人可以告诉我我在做什么错吗? 问题答案: 您必须交换索引的顺序: 我从手册中引用: 对于MyISAM表,可以 在多列索引的 第二 列上指

  • 我试图创建一个简单的表,但它给了我一个错误: 剧本: 我想不出这个问题,有人能帮忙吗?

  • 如题,新手,我知道要创建sequence,但是还是报错,代码如下: 提示“Error,ORA-00907:缺失右括号”。不知道为什么?正常应该如何创建自增id的表呢?

  • 我的数据库是XE18。我的用户有create user,我可以使用以下命令在SQL Plus中创建用户: 然后,我创建了一个包,其中包含一个函数,该函数应该是动态创建用户,下面几行是: 我得到这个错误: 关系到错误- ORA-65096: nome de atconição ou de usuário comum inválido ORA-06512: em"TOKEN.PRC_CRIA_USUA

  • 我想在oracle 12c中创建一个用户,但我遇到了一个问题。输入用户名和psw后,将显示以下警告:ORA-65096:无效的公用用户名或角色名