当前位置: 首页 > 知识库问答 >
问题:

Oracle如何使用sql创建自增ID?

庄智
2023-05-02

如题,新手,我知道要创建sequence,但是还是报错,代码如下:

create sequence seq_userid minvalue 1 maxvalue 99999999999999 start with 1 increment by 1 cache 100;

create table userinfo (
id varchar(4000) primary key default seq_userid.nextval,
username varchar(100) not null,
userpwd varchar(100) not null,
regdate date default sysdate not null);

提示“Error,ORA-00907:缺失右括号”。不知道为什么?正常应该如何创建自增id的表呢?

共有1个答案

鲁昕
2023-05-02

创建一个触发器。

创建序列和表。但是,你不要在 id 列中用 DEFAULT 子句:

CREATE SEQUENCE seq_userid MINVALUE 1 MAXVALUE 99999999999999 START WITH 1 INCREMENT BY 1 CACHE 100;

CREATE TABLE userinfo (
  id NUMBER(19) PRIMARY KEY,
  username VARCHAR2(100) NOT NULL,
  userpwd VARCHAR2(100) NOT NULL,
  regdate DATE DEFAULT SYSDATE NOT NULL
);

接下来再创建一个触发器:

CREATE OR REPLACE TRIGGER trg_userinfo_id
BEFORE INSERT ON userinfo
FOR EACH ROW
BEGIN
  SELECT seq_userid.NEXTVAL
  INTO :new.id
  FROM dual;
END;
/

或者用 IDENTITY 关键字实现功能。

CREATE TABLE userinfo (
  id NUMBER GENERATED ALWAYS AS IDENTITY,
  username VARCHAR2(100) NOT NULL,
  userpwd VARCHAR2(100) NOT NULL,
  regdate DATE DEFAULT SYSDATE NOT NULL
);
 类似资料:
  • 我试图创建一个简单的表,但它给了我一个错误: 剧本: 我想不出这个问题,有人能帮忙吗?

  • 问题内容: 直到11g版本(包括11g),Oracle中似乎都没有AUTO_INCREMENT的概念。 如何在Oracle 11g中创建行为类似于自动增量的列? 问题答案: 表定义: 触发定义: 更新: IDENTITY 列现在在Oracle 12c上可用: 或指定起始值和增量值,也防止任何插入到标识列(GENERATED ALWAYS)中(同样,仅适用于Oracle 12c +) 另外,Orac

  • 本文向大家介绍Oracle 创建主键自增表示例代码,包括了Oracle 创建主键自增表示例代码的使用技巧和注意事项,需要的朋友参考一下 前言 本篇文章给大家主要介绍的是在oracle中如果创建自增长表的方法,这里要用到序列。下面话不多说,我们来看示例代码。 示例代码 注意:触发器是非必须的,可以从业务上严格要求指定插入值。 注意oracle限制对象名的字符长度不能超过30个字符,所以表名要控制在一

  • 问题内容: 使用这样的地理数据记录: 我想输出类似这样的内容,其中它以矩阵形式显示START / END配对: 我可以看到如何以及将如何找到数据,但是我对如何显示为矩阵一无所知。有人有什么想法吗? 问题答案: 这似乎可以解决问题,并在PostgreSQL 9.1上进行了测试。几乎肯定会需要对它进行调整以使其适合SQL Server(任何人都可以随时更新我对此的回答)。 但是请注意,我的输出与您的输

  • 问题内容: 我有以下表格示例。Thera可以是无限的分支机构和客户。我需要对该分支进行分组并计算他们的客户,然后用不同的列来显示它。 请注意,可以有无限的分支和客户,查询不仅必须在这种情况下有效。 在这种情况下,可接受的结果是: 示例SQL DATA 问题答案: 我认为写一个返回变量结构的流水线表函数虽然很复杂,但却是可能的。您的管道表函数将使用Oracle Data Cartridge接口和An