簡體   English   中英

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

[英]How to insert Hex data into the oracle table?

我有下表:

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';

但這不起作用,有什么建議嗎?

錯誤可能有兩個來源:

  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');

您無需轉換為原始格式,可以直接使用Oracle的十六進制格式。 版本1使用從RAWVARCHAR2隱式轉換,版本2使用顯式轉換:

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

數據類型不應該指定為RAW嗎?

文檔

將原始二進制數據“按原樣”加載到RAW數據庫列中時,Oracle數據庫不會對其進行轉換。 如果將其加載到CHAR列中,則Oracle數據庫會將其轉換為十六進制。 無法將其加載到DATE或number列中。

該字段的長度是控制文件中指定的字節數。 此長度僅受數據庫中目標列的長度和內存資源的限制。 即使字符長度語義用於數據文件,長度也始終以字節為單位。 RAW數據字段無法定界。

如果您的數據不是真正的二進制/原始(如列的大小所示),而是一個數字,則可以將其存儲為數字。

十六進制只是表示數字(表示法)的一種方法。 因此,我只將其存儲為數字,然后在其上方放置一個視圖 ,以便您可以直接查看/查詢十六進制值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM