繁体   English   中英

oracle表中列的唯一序列

[英]Unique sequence for a column in oracle table

我正在尝试加载一个表,其中有一个名为E_id的PK列。 我想在informatica级别每次将一行加载到该表中时为该列生成一个唯一ID。 但我希望此e_id列在表级别生成唯一值。 我可以通过在表create script本身上对此列写查询来实现此目的吗? 目前,我尝试了这种默认值的方法

e_id NUMBER DEFAULT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF9')) NOT NULL

虽然有时我会获得两个记录相同的值。 有人可以帮忙吗?

TIA。

如果您使用的是12c,最简单的方法是使用IDENTITY列。 每当您插入记录时,Oracle都会自动为该列生成一个唯一值。

在以前的版本中,您可以定义一个序列并通过触发器生成它,或者直接在insert语句中引用它。

您提到了Informatica。 自从我使用它已有很长时间了,但是我似乎还记得有一种使用Informatica生成唯一ID的简单方法。

最常见的方法之一是使用序列

1创建序列

2在插入行触发器之前,该触发器将值填充到pk列中

create sequence GSEQUENCE
minvalue 1000
maxvalue 99999999999999999
start with 93581
increment by 1
cache 20;


CREATE OR REPLACE TRIGGER BI_DOCUMENTS
  BEFORE INSERT
  on DOCUMENTS

  for each row
declare numrows INTEGER;
begin


select gsequence.nextval
into :new.id_DOCUMENT
from dual;

end;
/

您可以使用对于所有练习目的都是唯一的全局唯一ID(GUID)。 许多系统使用GUID生成唯一的ID。

select sys_guid() from dual

进入这里

尽管GUID给出了真正随机的唯一ID,但是如果需要顺序唯一值,则始终可以使用Oracle序列。

Oracle没有“自动增量”列,但是您可以通过触发器获得相似的结果。

编辑:您也可以引用此链接。 如何在Oracle中生成GUID?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM