2014-01-13 99 views
6

有沒有辦法創建一個SQL腳本來將Oracle RAW(16)的列表轉換爲GUID將Raw(16)轉換爲GUID

我需要找到一個簡單快捷的方法來轉換大約1400萬個物品。我已將列表導出到多個分隔文件,並且可以將這些數據導入到模式中。

+0

你的意思RAWTOHEX? – tbone

回答

4

A RAW(16)基本上一個GUID:它是一個16字節的十六進制值。所以一個選擇就是讓它獨自一人。 Oracle將隱式轉換字符和十六進制之間,所以如果你正在尋找一個排它的原始值FE2BF132638011E3A647F0DEF1FEB9E8,您可以在查詢中使用的字符串:

SELECT * 
FROM myTable 
WHERE myRaw16Column = 'FE2BF132638011E3A647F0DEF1FEB9E8'; 

如果你想在RAW(16)更改爲CHAR(32)爲你可以使用RAWTOHEX作爲@tbone的建議。

INSERT INTO NewTable (myGUIDColumn, ...) 
    SELECT RAWTOHEX(myRawColumn), ... 
    FROM OldTable 

如果你想成爲一個CHAR(36)破折號格式的GUID,事情變得複雜,快速:

INSERT INTO NewTable (myGUIDColumn, ...) 
    SELECT REGEXP_REPLACE(myRaw16Column, '(.{8})(.{4})(.{4})(.{4})(.*)', '\1-\2-\3-\4-\5'), ... 
    FROM OldTable 
+0

是myGUIDColumn是Char(32)數據類型?我也需要它在破折號格式的GUID。 – UNIBALL

+0

'RAWTOHEX'示例顯示如何將'RAW(16)'更改爲未格式化的GUID,即「CHAR(32)'。 'REGEXP_REPLACE'示例顯示如何將'RAW(16)'更改爲破折號格式的GUID,即'CHAR(36)'。就個人而言,我會將它存儲爲'RAW(16)',這是Oracle'SYS_GUID()'函數返回的內容,並根據需要對其進行格式化以供顯示。但這只是我的偏好。正如我在答案中的第一個例子所顯示的那樣,您可以在'RAW(16)'列中查詢GUID值,而無需訴諸任何特殊技巧。 –

+0

謝謝埃德。 我有大約1400萬個文件需要從UNIX中刪除,目前唯一可以識別它們的方法是通過文件名。文件名稱如下所示。 FN {FFEF5B84-D2ED-45E3-9BD6-5C368357428A} {6A6CF41E-BE0F-4892-9808-34EDDD802300} -0.pdf 第一個GUID是Object_ID,第二個GUID是對象存儲標識符。但是,數據庫以RAW(16)格式列出這些數據。我目前有一個需要刪除的文件夾的完整列表,但Object_ID是RAW(16)格式。如果我可以將Object_ID轉換爲GUID,那麼我可以創建一個文件列表。 – UNIBALL