我的應用程序內部使用通過sys_guid()生成的RAW(16)guid。
最近我開始關聯活動目錄用戶,其中我得到的格式爲:00000000-0000-0000-0000-00000000000Oracle GUIDTORAW和RAWTOGUID函數字節順序
以下兩個函數是否正確地進行此轉換?
發現以下網站:
create or replace
FUNCTION RAWTOGUID
(RawData IN RAW
) RETURN VARCHAR AS
BEGIN
declare HexData varchar(32) := rawtohex(RawData);
begin
return
substr(HexData, 7, 2)
|| substr(HexData, 5, 2)
|| substr(HexData, 3, 2)
|| substr(HexData, 1, 2)
|| '-'
|| substr(HexData, 11, 2)
|| substr(HexData, 9, 2)
|| '-'
|| substr(HexData, 15, 2)
|| substr(HexData, 13, 2)
|| '-'
|| substr(HexData, 17, 4)
|| '-'
|| substr(HexData, 21, 12);
end;
END RAWTOGUID;
添加在以下站點:
http://dbaspot.com/oracle-server/69226-guid-char-conversion-function.html
想出了這個功能做逆:
create or replace
FUNCTION GUIDTORAW
(HexData IN VARCHAR
) RETURN RAW AS
BEGIN
declare StringData varchar(32) := TRANSLATE(HexData,'0{-}','0');
begin
return
hextoraw(substr(StringData, 7, 2)
|| substr(StringData, 5, 2)
|| substr(StringData, 3, 2)
|| substr(StringData, 1, 2)
|| substr(StringData, 11, 2)
|| substr(StringData, 9, 2)
|| substr(StringData, 15, 2)
|| substr(StringData, 13, 2)
|| substr(StringData, 17, 4)
|| substr(StringData, 21, 12));
end;
END GUIDTORAW;
他們來回轉換,但我實際上尊重排序或有正確的順序呢?
我已經使用.NET Guid.ToByteArray()方法將RAWTOGUID()函數的結果與運行RAWTOGUID()vs Guid.ToString()的byte [[]插入到Oracle中並得到了相同的結果。如果您已經測試過GUIDTORAW()確實是RAWTOGUID()的反轉,那麼它看起來好像這些函數都可以。但是,我會更喜歡Guid字節排序的規格並與之比較。 –
相關:http://stackoverflow.com/questions/7289734/convert-from-oracles-raw16-to-nets-guid和http://stackoverflow.com/questions/9195551/why-does-guid-tobytearray-order -the字節僻-IT-做 –