oracle表

时间:2017-01-17 10:35:37

标签: sql oracle timestamp unique

我正在尝试加载一个表,其中我有一个名为E_id的PK列。每次在信息级别将一行加载到此表时,我想为此列生成唯一的ID。但是我希望这个e_id列在表级生成一个唯一值。我可以通过在表创建脚本本身写一个查询来实现这一点吗? 目前我尝试了这种使用此

来默认值的方法
e_id NUMBER DEFAULT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF9')) NOT NULL

虽然有时我得到两个记录的相同值。 有人可以帮忙解决这个问题吗?

TIA。

3 个答案:

答案 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?