有没有办法创建一个SQL
脚本来将Oracle RAW(16)
的列表转换为GUID
?将Raw(16)转换为GUID
我需要找到一个简单快捷的方法来转换大约1400万个物品。我已将列表导出到多个分隔文件,并且可以将这些数据导入到模式中。
有没有办法创建一个SQL
脚本来将Oracle RAW(16)
的列表转换为GUID
?将Raw(16)转换为GUID
我需要找到一个简单快捷的方法来转换大约1400万个物品。我已将列表导出到多个分隔文件,并且可以将这些数据导入到模式中。
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
是myGUIDColumn是Char(32)数据类型?我也需要它在破折号格式的GUID。 – UNIBALL
'RAWTOHEX'示例显示如何将'RAW(16)'更改为未格式化的GUID,即“CHAR(32)'。 'REGEXP_REPLACE'示例显示如何将'RAW(16)'更改为破折号格式的GUID,即'CHAR(36)'。就个人而言,我会将它存储为'RAW(16)',这是Oracle'SYS_GUID()'函数返回的内容,并根据需要对其进行格式化以供显示。但这只是我的偏好。正如我在答案中的第一个例子所显示的那样,您可以在'RAW(16)'列中查询GUID值,而无需诉诸任何特殊技巧。 –
谢谢埃德。 我有大约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
你的意思RAWTOHEX? – tbone