Oracle中自動生成的guid與.Net中的guid的互動
無法識別。導致報錯。資料顯示不了。經過查資料,網上好像很少是專門去說明這個問題的部落格,後來經過多次檢視資料。故總結如下經驗。
在Oracle SQL 提供了一個生成guid的函式sys_guid:
SQL> select sys_guid() from dual ;
SYS_GUID()
--------------------------------
A8F662B86E7413FEE040970A437C6BD7
但是oracle生成的guid跟.NET的guid看起來不一樣。.net的guid是36字元(中間有4個-),oracle的只有32個數字。再將oracle的guid製造成跟.net的一樣。
CREATE OR REPLACE
FUNCTION get_uuid
RETURN VARCHAR
IS
guid VARCHAR (50);
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 get_uuid;
CREATE OR REPLACE FUNCTION get_uuid RETURN VARCHAR IS guid VARCHARView Code(50); 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 get_uuid;
但是通過.NET程式判斷,結果還是不一樣,這個時候,通過肉眼是看不到區別(因為我看了1個多小時都沒看出端倪。哈哈)。後來去檢視資料,就明白了原來是oracle生成的那個guid儲存方式跟.NET的儲存方式不一樣。分別是hextoraw與rawtohex。關於hextoraw與rawtohex請看下一篇文章。
後來修改成相同的儲存方式,就ok
CREATE OR REPLACE
FUNCTION get_uuid
RETURN VARCHAR
IS
guid VARCHAR (50);
BEGIN
guid := lower(RAWTOHEX(sys_guid()));
RETURN
substr(guid,1,8)||'-'||substr(guid,9,4)||'-'||substr(guid,13,4)||'-'||substr(guid,17,4)||'-'||substr(guid,21,12);
END get_uuid;