2013-06-13 53 views
1

我有如下表:如何將十六進制數據插入到oracle表中?

create table o_newstdata1 (
field1 raw(8) 
); 

以下input.data文件:

0x12345678 
0x1234 
0x12 

我怎麼可以插入這樣的數據到我o_newstdata1表?

我試圖將其加載爲VARCHAR數據:

load data 
INFILE '/export/home/mine/input.data' 
replace 
into table o_newstdata1 
trailing nullcols 
(
field1 varchar (8) 
) 

,並質疑這樣的事情:

select field1 from o_newstdata1 where utl_raw.cast_to_raw(field1) like '0x1234'; 

,但它不能正常工作,有什麼建議?

+0

這部分不工作,你得到了什麼異常? – WiiMaxx

+0

未選擇行 – fen1ksss

+0

SQL * Loader日誌文件說了什麼? –

回答

3

有可能是錯誤的兩個來源:

  1. 加載使用SQL * Loader
  2. 查詢原始數據的原始數據

要檢查詢問部作品中,使用這樣的:

CREATE TABLE o_newstdata1 (field1 RAW(8)); 
INSERT INTO o_newstdata1(field1) VALUES ('12AB'); 
INSERT INTO o_newstdata1(field1) VALUES ('34EF'); 

您不需要轉換爲raw,可以使用Oracle的十六進制格式direc TLY。第1版採用隱式轉換從RAW TO VARCHAR2,第2版顯式轉換:

SELECT * FROM o_newstdata1 WHERE field1 = '12AB'; 
SELECT * FROM o_newstdata1 WHERE rawtohex(field1)='12AB'; 
+0

這工作正常,謝謝 – fen1ksss

1

數據類型是否應該指定爲RAW?

docs

當原始二進制數據加載「原樣」成RAW數據庫列,它不是由Oracle數據庫轉換。如果將其加載到CHAR列中,則Oracle數據庫將其轉換爲十六進制。它無法加載到日期或編號列中。

該字段的長度是控制文件中指定的字節數。該長度僅受數據庫中目標列的長度和內存資源的限制。即使數據文件使用字符長度語義,長度也總是以字節爲單位。 RAW數據字段不能被分隔。

+0

我該如何查詢來自char列的數據作爲十六進制? – fen1ksss

1

如果你的數據是不是真的二元/生(由列的大小所示),但只是一個數字,你可以將其存儲爲一個數字。

十六進制只是一種方式,代表一個數字(符號)。所以我只是將它作爲一個數字來存儲,並且在其上放置一個視圖,以便您可以直接查看/查詢十六進制值。

這樣你甚至可以在數據庫中添加或比較這些值。

相關問題