LONG RAW转换BLOB

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值