在Oracle中使用Guid

发布日期:2014-03-09 14:30:33

sys_guid()  -  唯一索引

在Oracle中可以用SYS_GUID()来生成一个guid,相当于msSql中的newid()。

在Oracle9i和Oracle 10g 里SYS_GUID产生得到的数据是32 位的,如:234E45F0077881AAE0430AA3034681AA

但Oracle中的guid与msSql中的guid格式不完全相同。

将Oracle中的guid分割成为 Windows系统 ObjectId 的格式:{8-4-4-4-12} ,下面给出两种解决方法: 
方法一:利用substr进行分割,非常简单,具体代码如下: 
/** 
* 创建系统Object Id 格式的字符串,返回的结果如下:{234E45F0-077A-81AA-E043-0AA3034681AA} 
*/ 
function CreateGUID return varchar2 
is 
guid varchar(64); 
begin 
guid := SYS_GUID(); 
return 
'{'||substr(guid,1,8)||'-'||substr(guid,9,4)|| 
'-'||substr(guid,13,4)||'-'||substr(guid,17,4) 
||'-'||substr(guid,21,12)||'}'; 
end CreateGUID; 
方法二:利用CONCAT函数进行连接,具体代码如下: 
CREATE OR REPLACE FUNCTION AILDM_GET_GUID 
    RETURN CHAR 
IS 
    v_guid              CHAR (36); 
    v_guid_part_one     CHAR (8); 
    v_guid_part_two     CHAR (4); 
    v_guid_part_three   CHAR (4); 
    v_guid_part_four    CHAR (4); 
    v_guid_part_five    CHAR (12); 
BEGIN 
    SELECT SYS_GUID () 
  INTO v_guid 
  FROM DUAL;

    v_guid_part_one := SUBSTR (v_guid, 0, 8); 
    v_guid_part_two := SUBSTR (v_guid, 8, 4); 
    v_guid_part_three := SUBSTR (v_guid, 12, 4); 
    v_guid_part_four := SUBSTR (v_guid, 16, 4); 
    v_guid_part_five := SUBSTR (v_guid, 20, 12); 
    v_guid := 
    CONCAT 
    (CONCAT 
     (CONCAT 
      (CONCAT (CONCAT (CONCAT (CONCAT (CONCAT (v_guid_part_one, 
                 '-'), 
               v_guid_part_two 
              ), 
             '-' 
            ), 
           v_guid_part_three 
          ), 
         '-' 
        ), 
       v_guid_part_four 
      ), 
      '-' 
     ), 
     v_guid_part_five 
    ); 
    RETURN (v_guid); 
END AILDM_GET_GUID;