oracle 10g及以前版本存储照片使用long raw类型,10G后版本使用blob存储照片,下面介绍两种方法将long raw类型转换为blob:
1、复制一张新表把LONG RAW类型的字段转为BLOB类型的字段;
CREATE TABLE T_TARGET AS
SELECT ID,TITLE,TO_LOB(CONTENT) AS CONTENT
FROM T_SOURCE;
2、通过kettle抽取方法转换
转换代码:
import java.io.*;
String zpStreamField;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
if (first){
zpStreamField = getParameter("zpStreamField");
first=false;
}
// It is always safest to call createOutputRow() to ensure that your output row's Object[] is large
// enough to handle any new fields you are creating in this step.
//
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
String zpstr = get(Fields.In, "ZP").getString(r);
// Set the value in the output field
byte[] zpStream = hexStringToBytes(zpstr);
get(Fields.Out, zpStreamField).setValue(outputRow, zpStream);
// putRow will send the row on to the default output hop.
//
putRow(data.outputRowMeta, outputRow);
return true;
}
private byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
public byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}