我正在尝试加载一个表,其中我有一个名为E_id的PK列。每次在信息级别将一行加载到此表时,我想为此列生成唯一的ID。但是我希望这个e_id列在表级生成一个唯一值。我可以通过在表创建脚本本身写一个查询来实现这一点吗? 目前我尝试了这种使用此
来默认值的方法e_id NUMBER DEFAULT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF9')) NOT NULL
虽然有时我得到两个记录的相同值。 有人可以帮忙解决这个问题吗?
TIA。
答案 0 :(得分:1)
如果您使用12c,最简单的方法是使用IDENTITY列。无论何时插入记录,Oracle都会自动为列生成唯一值。
在以前的版本中,您可以定义一个序列并通过触发器生成它或直接在insert语句中引用它。
你提到了Informatica。自从我使用它以来很长一段时间,但我似乎记得有一种使用Informatica生成唯一ID的简单方法。
答案 1 :(得分:1)
最常见的方法之一是使用序列
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;
/
答案 2 :(得分:0)
您可以使用全球唯一ID(GUID),这是所有练习目的所独有的。许多系统使用GUID生成唯一ID。
select sys_guid() from dual
投入here
虽然GUID提供了真正随机的唯一ID,但如果需要连续的唯一值,则可以始终使用Oracle序列。
Oracle没有“自动增量”列,但您可以通过触发器获得类似的结果。
编辑:您也可以参考此链接How to generate a GUID in Oracle?