如何在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;