Sybase数据库中image格式通过hex 16进制存储,使用sqlldr无法导入到Blob字段中。(可以导入数据但是无法识别)
第一步: 用sqlldr 将数据导入到Oracle中,注意存储为Clob格式
第二步: 将Clob转换成Blob字段,使用函数 hextoraw。 该函数最大转换长度是4000,所以需要截断Clob然后拼接起来
以下是主要代码:
LOOP
IF
( end_i < len )
THEN
dbms_lob.append(
buf,
hextoraw(dbms_lob.substr(
hdata,
end_i,
start_i
) )
);
start_i := end_i + 1;
end_i := start_i + 4000;
ELSE
dbms_lob.append(
buf,
hextoraw(dbms_lob.substr(
hdata,
len,
start_i
) )
);
EXIT;
END IF;
END LOOP;
最后用buf更新相应数据就完成了