回答
可以使用SYS_GUID()函数在你插入语句生成一个GUID:
insert into mytable (guid_col, data) values (sys_guid(), 'xxx');
的首选数据类型存储的GUID是RAW(16)。
由于纳思答案:
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 Ë F955E040449808B55601
88FDC68C75D ˚F F955E040449808B55601
也许有用:http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html
目前尚不清楚你的意思是通过自动生成一个GUID到一个INSERT语句,但在猜测,我认为你正在试图做类似如下:
INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Adams');
INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Baker');
在这种情况下,我相信ID列应该声明为RAW(16);
我正在做我的头顶。我没有一个方便测试的Oracle实例,但我认为这就是你想要的。
还可以包括一个GUID的表作为默认的创建语句,例如:
create table t_sysguid
(id raw(16) default sys_guid() primary key
, filler varchar2(1000)
)
/
感谢您提醒我注意一个我不知道的有用Oracle特性。 – SteveT 2012-05-07 14:21:51
您可以运行下面的查询
select sys_guid() from dual
union all
select sys_guid() from dual
union all
select sys_guid() from dual
sys_guid()是一个糟糕的选项,因为其他答案已经提到。生成的UUID,避免连续值的一种方法是随机生成的十六进制字符串自己:
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;
这些不保证是唯一的。如果要存储它,则需要将它与某个特定约束条件(无论您存储在何处)进行配对。 (如果遇到重复值并违反唯一约束条件,则会生成新的数字,但不太可能) – 2018-01-05 01:09:25
您可以使用函数波纹管,以生成你的UUID GUID的
create or replace FUNCTION RANDOM_GUID
RETURN VARCHAR2 IS
RNG NUMBER;
N BINARY_INTEGER;
CCS VARCHAR2 (128);
XSTR VARCHAR2 (4000) := NULL;
BEGIN
CCS := '' || 'ABCDEF';
RNG := 15;
FOR I IN 1 .. 32 LOOP
N := TRUNC (RNG * DBMS_RANDOM.VALUE) + 1;
XSTR := XSTR || SUBSTR (CCS, N, 1);
END LOOP;
RETURN SUBSTR(XSTR, 1, 4) || '-' ||
SUBSTR(XSTR, 5, 4) || '-' ||
SUBSTR(XSTR, 9, 4) || '-' ||
SUBSTR(XSTR, 13,4) || '-' ||
SUBSTR(XSTR, 17,4) || '-' ||
SUBSTR(XSTR, 21,4) || '-' ||
SUBSTR(XSTR, 24,4) || '-' ||
SUBSTR(XSTR, 28,4);
END RANDOM_GUID;
例通过以上功能genedrated :
8EA4-196D-BC48-9793-8AE8-5500-03DC-9D04
- 1. 如何在VBScript中生成GUID?
- 2. 如何在.NET中生成1版Guid?
- 3. 如何在hibernate中按需生成GUID?
- 4. 如何在Vim中生成GUID?
- 5. 在SQL Server中如何生成GUID?
- 6. Guid在C中生成bug#
- 7. 在KRL中生成GUID/UUID
- 8. 如何在Windows Mobile下生成GUID?
- 9. 生成GUID
- 10. GUID生成
- 11. 自动生成GUID在SaveChanges()
- 12. 如何在Oracle中生成xml空值?
- 13. 如何在Oracle中生成排列?
- 14. 如何为字符串生成GUID?
- 15. 如何生成顺序的GUID?
- 16. 在AIR 3中生成一个GUID?
- 17. 在Sybase中自动生成GUID
- 18. 在C#中生成所需的GUID
- 19. 如何在存储过程中生成新的Guid?
- 20. 如何在SQLITE中生成唯一的GUID 36字符iPhone
- 21. 如何在实体框架中有条件地生成DatabaseGenerated GUID
- 22. 在Oracle中生成报告?
- 23. 不生成唯一的GUID
- 24. ABAP生成随机UUID/GUID
- 25. 从Guid生成颜色
- 26. WIX自动生成GUID *?
- 27. 生成的GUID主键EF5
- 28. 如何从C#或T-Sql中的给定GUID生成新的GUID?
- 29. 如何在内部生成oracle rowid?
- 30. T-SQL中的确定性GUID生成
怪异的SYS_GUID()总是给我同样的GUID ..我是否需要得到种子的功能或? – Acibi 2010-06-14 13:45:43
你确定它们完全一样吗?它倾向于返回非常相似(但不同)的值 - 例如当我刚刚尝试时,我得到了88FDC68C75DEF955E040449808B55601和88FDC68C75DFF955E040449808B55601,它们只有第12个字符才有区别! – 2010-06-14 13:54:46
哦,是啊! 非常感谢,我读得太快;) – Acibi 2010-06-14 14:08:50