生成多个UUID Oracle

时间:2011-10-13 02:20:27

标签: oracle uuid

甲骨文: - 我在表中有大约850条记录,需要分配UUID。

我正在使用以下查询。

select substr(sys_guid(),1,3)||'-'||
          substr(sys_guid(),4,4)||'-'||
          substr(sys_guid(),8,4)||'-'||
          substr(sys_guid(),13)
from (select sys_guid() as mygid from dual)

我需要一次性生成多个/ 850条记录。 有什么建议 ? 我应该过来吗?

2 个答案:

答案 0 :(得分:2)

如果您确实需要select,请使用分层查询:

SELECT Substr(mygid,1,3)||'-'||
       Substr(mygid,4,4)||'-'||
       Substr(mygid,8,4)||'-'||
       Substr(mygid,12)
  FROM (
        SELECT Sys_GUID() AS mygid FROM dual
        CONNECT BY Level <= :desired_number_of_records
       )   

但通常update会出现什么问题?

UPDATE your_tab
   SET gid_col = (
         SELECT Substr(mygid,1,3)||'-'||
                Substr(mygid,4,4)||'-'||
                Substr(mygid,8,4)||'-'||
                Substr(mygid,12)
           FROM( SELECT Sys_Guid() AS mygid FROM dual ) 
         )  

答案 1 :(得分:1)

不确定格式是否真的是您想要的,因为您缺少32个字符中的9个,购买时您可以根据需要修改格式。以下示例显示如何格式化XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:

UPDATE MY_TABLE
SET GUID_COL = (
  select regexp_replace((rawtohex(sys_guid()), '([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') as FORMATTED_GUID from dual
)