如何在Oracle中生成一个GUID?

是否有可能自动生成一个插入语句GUID?

另外,我应该使用什么types的字段来存储这个GUID?

您可以使用SYS_GUID()函数在您的插入语句中生成一个GUID:

insert into mytable (guid_col, data) values (sys_guid(), 'xxx'); 

用于存储GUID的首选数据types是RAW(16)。

正如Gopinath的回答:

  select sys_guid() from dual union all select sys_guid() from dual union all select sys_guid() from dual 

你得到

88FDC68C75DDF955E040449808B55601
88FDC68C75DEF955E040449808B55601
88FDC68C75DFF955E040449808B55601

正如托尼·安德鲁斯所说的, 只有一个字符不同

88FDC68C75D D F955E040449808B55601
88FDC68C75D E F955E040449808B55601
88FDC68C75D F F955E040449808B55601

也许有用: http : //feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

你也可以在表的create语句中包含guid作为默认值,例如:

 create table t_sysguid ( id raw(16) default sys_guid() primary key , filler varchar2(1000) ) / 

看到这里: http : //rwijk.blogspot.com/2009/12/sysguid.html

你不明白你的意思是自动生成一个插入语句的GUID,但在猜测,我想你正在尝试做下面的事情:

 INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Adams'); INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Baker'); 

在这种情况下,我认为ID列应该被声明为RAW(16);

我正在做我的头顶。 我没有一个方便testing的Oracle实例,但我认为这就是你想要的。

您可以运行以下查询

  select sys_guid() from dual union all select sys_guid() from dual union all select sys_guid() from dual 

sys_guid()是一个不好的select,因为其他答案已经提到。 生成UUID并避免顺序值的一种方法是自己生成随机的hexstring:

 select regexp_replace( to_char( DBMS_RANDOM.value(0, power(2, 128)-1), 'FM0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'), '([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{12})', '\1-\2-\3-\4-\5') from DUAL;