2014-01-13 175 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