私のアプリは、sys_guid() によって生成された RAW(16) GUID を内部的に使用します。
最近、00000000-0000-0000-0000-00000000000 の形式で GUID を取得する Active Directory ユーザーの関連付けを開始しました。
次の 2 つの関数は、この変換を正しく行っていますか?
次のサイトを見つけました。
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;
それらは前後に変換されますが、実際にエンディアンを尊重していますか、それとも正しい順序を持っていますか?