首页 > 解决方案 > 如何在 Oracle 中生成 ID?

问题描述

我想创建 sql 查询以在我的 Oracle 数据库中插入数据。

我阻止了 ID 部分,在我的 JAVA 代码上,我生成了这样的 ID。

@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
protected String id;

但我不知道如何在 SQL 中做到这一点。

谢谢!

标签: javasqloracle

解决方案


你在java端这样做有什么具体原因吗?这是数据库将更有效地处理的事情。如果这是一张新桌子,并且您可以选择,我会identity column在您的桌子上使用。

例如(此解决方案在 99% 的情况下都可以正常工作):

create table test_tab 
  (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY 
       CONSTRAINT test_tab_pk PRIMARY KEY
   column1 VARCHAR2(10)
  );

或者,如果您想根据 guid 生成一个 id,您可以使用以下语法。请注意,这里的 id 列仍然是一个数字 - 格式掩码 X 将其转换为十六进制值。

CREATE TABLE test_tab (
  id NUMBER DEFAULT ON NULL to_number(sys_guid(),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
    CONSTRAINT test_tab_pk PRIMARY KEY,
  column1  VARCHAR2(10 CHAR)
);

或者,如果它必须是 guid,那么您可以将主键列定义为 VARCHAR2 并存储实际的 guid。请注意,这不是最佳做法。

CREATE TABLE test_tab (
  id VARCHAR2(50) default on null sys_guid()
    CONSTRAINT test_tab_pk PRIMARY KEY,
  column1  VARCHAR2(10 CHAR)
);

在插入语句中,您可以只保留 id 列,它将自动填充。

INSERT INTO test_tab(column1) VALUES ('Foobar');


推荐阅读