2011-10-13 113 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 
)