[英]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.