这篇博客解释说,sys_guid()每个系统的输出都不是随机的:
http://feuerthoughts.blogspot.de/2006/02/watch-out-for-sequential-oracle-guids.html
不幸的是我必须使用这样的系统.
如何确保获得随机UUID?有可能sys_guid()吗?如果不是如何在Oracle上可靠地获取随机UUID?
我们正在测试Oracle的工作,并负责在Oracle上构建所有数据库对象(表,过程,触发器等),我们目前使用的是Microsoft SQL Server 2008 R2.我们几乎为所有ID列使用uniqueidentifier.我用这个函数来创建GUID:
CREATE OR REPLACE FUNCTION NEWID RETURN CHAR IS guid CHAR(36) ;
BEGIN
SELECT SYS_GUID() INTO guid FROM DUAL;
guid :=
SUBSTR(guid, 1, 8) ||
'-' || SUBSTR(guid, 9, 4) ||
'-' || SUBSTR(guid, 13, 4) ||
'-' || SUBSTR(guid, 17, 4) ||
'-' || SUBSTR(guid, 21);
RETURN guid;
END NEWID;
/
Run Code Online (Sandbox Code Playgroud)
但是现在我无法弄清楚如何在创建表时将它用作列的默认值.这是一个非工作的例子:
CREATE TABLE "NonWorkingExample"
(
"ID" CHAR(36) NOT NULL DEFAULT NEWID(),
"UnitNumber" NUMBER(38) NOT NULL,
"StartDateTime" TIMESTAMP NOT NULL,
"EndDateTime" TIMESTAMP NULL,
CONSTRAINT PK_RentalAgreements …Run Code Online (Sandbox Code Playgroud) 我试图寻找一个解决方案转换Oracle RAW GUID的String格式为标准GUID格式。我找不到用例的解决方案。这是我要寻找的示例:
ORACLE RAW (String): 9BB2A2B8DF8747B0982F2F1702E1D18B
Run Code Online (Sandbox Code Playgroud)
需要使用Java代码将其转换为标准或带括号的GUID,
B8A2B29B-87DF-B047-982F-2F1702E1D18B or {B8A2B29B-87DF-B047-982F-2F1702E1D18B}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。