2014-01-13 13 views
6

RAW(16)のリストをGUIDに変換するSQLスクリプトを作成する方法はありますか?Raw(16)をGUIDに変換する

約1400万件のアイテムを簡単かつ迅速に変換する必要があります。区切られた複数のファイルにリストをエクスポートしました。このデータをスキーマにインポートできます。

+0

あなたはRAWTOHEX意味ですか? – tbone

答えて

4

RAW(16)基本的にです。GUID:16バイトの16進値です。だから1つの選択肢は、ただそれをそのまま残すことです。 Oracleは、暗黙的に文字や六角の間にキャストされますので、あなたは、その生の値FE2BF132638011E3A647F0DEF1FEB9E8ある行を探しているなら、あなたはあなたのクエリで文字列を使用することができます。

SELECT * 
FROM myTable 
WHERE myRaw16Column = 'FE2BF132638011E3A647F0DEF1FEB9E8'; 

あなたはCHAR(32)RAW(16)を変更したい場合あなたの変換は@ tboneが示すようにRAWTOHEXを使用することができます。

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

'RAW(16)'をフォーマットされていないGUID( 'CHAR(32) ')に変更する方法を示しています。 'REGEXP_REPLACE'の例は' RAW(16) 'を' CHAR(36) 'というダッシュ形式のGUIDに変更する方法を示しています。個人的には、 'SYS_GUID()'関数が返す 'RAW(16)'として保存し、必要に応じて表示用にフォーマットします。しかし、それは私の好みです。答えの最初の例では、 'RAW(16)'カラムでGUID値を問い合わせることができます。特別なトリックに頼る必要はありません。 –

+0

ありがとうございます。 私はUNIXから削除する必要があるファイル数が約1400万であり、現在のところ、ファイル名で識別できる唯一の方法はあります。ファイル名は次のようになります。 FN {FFEF5B84-D2ED-45E3-9BD6-5C368357428A} {6A6CF41E-BE0F-4892-9808-34EDDD802300} -0.pdf この最初のGUIDはOBJECT_ID及び第二GUIDがオブジェクト格納識別子です。ただし、データベースはRAW(16)形式でこれらをリストします。私は現在、削除する必要があるFilestの完全なリストを持っていますが、Object_IDはRAW(16)形式です。 Object_IDをGUIDに変換できれば、ファイルのリストを作成できます。 – UNIBALL

関連する問題