sql - 在 oracle sql 中自动增加一个带有字符串前缀的 ID?

标签 sql database oracle

我已经创建了下表,并且我希望只要有一行添加到数据库中,用户 ID 就会自动递增。但是我希望将 ID 格式化为 000001,例如如下所示,因为有几个表,最好为每个 ID 提供一个字符串前缀:

userID
----------
user000001
user000002
user000003


CREATE TABLE UserTable (
userID VARCHAR(20),
username VARCHAR(250) NOT NULL,
firstName VARCHAR(250) NOT NULL,
lastName VARCHAR(250) NOT NULL,
CONSTRAINT pkUserID
    PRIMARY KEY (userID),
CONSTRAINT uniUsername
    UNIQUE (username)
);

最佳答案

您必须使用触发器和序列的组合,如下面的代码所示:

CREATE SEQUENCE CREATE SEQUENCE usertable_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
/

CREATE OR REPLACE TRIGGER usertable_trigger  
BEFORE INSERT ON UserTable
FOR EACH ROW

BEGIN
  SELECT 'user' || to_char(usertable_seq.NEXTVAL, '000099')
  INTO   :new.userID
  FROM   dual;
END;
/

关于sql - 在 oracle sql 中自动增加一个带有字符串前缀的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16118398/

相关文章:

sql - 如何在单个 SQL 查询中获取最新日期和日期以来的所有内容

mysql - 恶意软件清除后数据库中的引号逃逸

MySQL COUNT 个意外结果

sql - 如何在oracle中将列varchar更改为clob

sql - 创建一个易于安装的 sql 数据库的 dotnetnuke 包

sql - 实体关系图 - 3个没有链接的表

java - 过期后自动删除数据库行

sql - 多个 THEN 到单个 CASE 语句?

oracle - Oracle 10 中的嵌套 cos() 计算

java - ORA-01461-只能绑定(bind) LONG 值以插入 LONG 列