2011-10-13 1299 views
2

Oracle: - 我在表中有大约850条记录,需要分配UUID。生成多个UUID Oracle

我正在使用以下查询。

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条记录。 有什么建议吗? 我应该循环吗?

+0

你有2个错误。 ** 1。**在外层选择中使用'mygid'而不是'sys_guid'。 ** 2。**最后一个'substr'应该以12开头,而不是13 –

回答

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) 
     ) 
+0

感谢您的意见 – Fransis

+0

,同时使用UPDATE my_tab SET some_col = Sys_GUID() – Fransis

+0

我不确定我将能够生成我想要的格式 – Fransis

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 
)