Ton*_*ews 126
您可以使用SYS_GUID()函数在insert语句中生成GUID:
insert into mytable (guid_col, data) values (sys_guid(), 'xxx');
Run Code Online (Sandbox Code Playgroud)
用于存储GUID的首选数据类型是RAW(16).
正如Gopinath回答:
select sys_guid() from dual
union all
select sys_guid() from dual
union all
select sys_guid() from dual
Run Code Online (Sandbox Code Playgroud)
你得到
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
TTT*_*TTT 26
您还可以在表的create语句中包含guid作为默认值,例如:
create table t_sysguid
( id raw(16) default sys_guid() primary key
, filler varchar2(1000)
)
/
Run Code Online (Sandbox Code Playgroud)
见这里:http://rwijk.blogspot.com/2009/12/sysguid.html
小智 13
示例位于:http : //www.orafaq.com/usenet/comp.databases.oracle.server/2006/12/20/0646.htm
SELECT REGEXP_REPLACE(SYS_GUID(), '(.{8})(.{4})(.{4})(.{4})(.{12})', '\1-\2-\3-\4-\5') MSSQL_GUID FROM DUAL
Run Code Online (Sandbox Code Playgroud)
结果:
6C7C9A50-3514-4E77-E053-B30210AC1082
Run Code Online (Sandbox Code Playgroud)
如果您需要非顺序引导,您可以sys_guid()通过哈希函数发送结果(请参阅/sf/answers/1577439041/)。这个想法是保留原始创作中使用的任何独特性,并获得具有更多改组位的东西。
例如:
LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32))
Run Code Online (Sandbox Code Playgroud)
显示默认顺序 guid 与通过哈希发送它的示例:
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
Run Code Online (Sandbox Code Playgroud)
输出
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SYS_GUID()) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
UNION ALL
SELECT LOWER(SUBSTR(STANDARD_HASH(SYS_GUID(), 'SHA1'), 0, 32)) AS OGUID FROM DUAL
Run Code Online (Sandbox Code Playgroud)
通过在insert语句中自动生成一个guid来表达你的意思并不清楚,但我猜你正在尝试做类似以下的事情:
INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Adams');
INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Baker');
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为ID列应该声明为RAW(16);
我正在做这件事.我没有方便测试的Oracle实例,但我认为这就是你想要的.
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143717 次 |
| 最近记录: |