Oracle中如何生成GUID?
是否可以在 Insert 语句中自动生成 GUID?
另外,我应该使用什么类型的字段来存储此 GUID?
Is it possible to auto-generate a GUID into an Insert statement?
Also, what type of field should I use to store this GUID?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您可以使用 SYS_GUID() 函数在插入语句中生成 GUID:
存储 GUID 的首选数据类型是 RAW(16)。
正如戈皮纳特回答的那样:
你得到
正如托尼安德鲁斯所说,仅在一个字符上有所不同
也许有用:http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html
You can use the SYS_GUID() function to generate a GUID in your insert statement:
The preferred datatype for storing GUIDs is RAW(16).
As Gopinath answer:
You get
As Tony Andrews says, differs only at one character
Maybe useful: http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html
您还可以默认在表的创建语句中包含 guid,例如:
请参见此处:http://rwijk.blogspot.com/2009/12/sysguid.html
You can also include the guid in the create statement of the table as default, for example:
See here: http://rwijk.blogspot.com/2009/12/sysguid.html
示例发现于:
http://www.orafaq.com /usenet/comp.databases.oracle.server/2006/12/20/0646.htm
结果:
Example found on:
http://www.orafaq.com/usenet/comp.databases.oracle.server/2006/12/20/0646.htm
Result:
目前尚不清楚在插入语句中自动生成 guid 是什么意思,但猜测,我认为您正在尝试执行如下操作:
在这种情况下,我认为 ID 列应声明为 RAW(16) ;
我是凭空做这件事的。我没有方便测试的 Oracle 实例,但我认为这就是您想要的。
It is not clear what you mean by auto-generate a guid into an insert statement but at a guess, I think you are trying to do something like the following:
In that case I believe the ID column should be declared as RAW(16);
I am doing this off the top of my head. I don't have an Oracle instance handy to test against, but I think that is what you want.
如果您需要非顺序 guid,您可以通过哈希函数发送
sys_guid()
结果(请参阅 https: //stackoverflow.com/a/22534843/1462295)。这个想法是保留原始创作中使用的任何独特性,并获得具有更多改组位的东西。例如:
显示默认顺序 guid 与通过哈希发送它的示例:
输出
If you need non-sequential guids you can send the
sys_guid()
results through a hashing function (see https://stackoverflow.com/a/22534843/1462295 ). The idea is to keep whatever uniqueness is used from the original creation, and get something with more shuffled bits.For instance:
Example showing default sequential guid vs sending it through a hash:
output
正如其他答案所提到的,sys_guid() 是一个糟糕的选择。生成 UUID 并避免顺序值的一种方法是自己生成随机十六进制字符串:
sys_guid() is a poor option, as other answers have mentioned. One way to generate UUIDs and avoid sequential values is to generate random hex strings yourself:
您可以运行以下查询
You can run the following query
我建议使用 Oracle 的“dbms_crypto.randombytes”函数。
为什么?
此函数返回包含加密安全伪随机字节序列的 RAW 值,它可用于生成加密密钥的随机材料。
您不应该不使用函数“sys_guid”,因为只有一个字符会发生变化。
https://docs.oracle.com/database/121/SQLRF/函数202.htm#SQLRF06120
I would recommend using Oracle's "dbms_crypto.randombytes" function.
Why?
This function returns a RAW value containing a cryptographically secure pseudo-random sequence of bytes, which can be used to generate random material for encryption keys.
You should not use the function "sys_guid" because only one character changes.
https://docs.oracle.com/database/121/SQLRF/functions202.htm#SQLRF06120
您可以使用下面的函数来生成您的 UUID
由上面的函数生成的 GUID 示例:
8EA4-196D-BC48-9793-8AE8-5500-03DC-9D04
you can use function bellow in order to generate your UUID
Example of GUID genedrated by the function above:
8EA4-196D-BC48-9793-8AE8-5500-03DC-9D04
创建 350 个字符的 GUID:
dbms_random.STRING ('a', 350) - 返回混合大小写字母字符的字符串
dbms_random.STRING ('x', 350) - 返回大写字母数字字符的字符串
Creating a 350 characters GUID:
dbms_random.STRING ('a', 350) - returning string in mixed case alpha characters
dbms_random.STRING ('x', 350) - returning string in uppercase alpha-numeric characters