今天碰到这个问题,起先以为是因为字段varchar(2)类型的问题,
 后来网上查了下,原来oracle10g的驱动程序有问题,

检查了下程序,是保存相片出问题,photo字段为blob 类型,从一个表查询出来 保存到另外一张里面去,没注意null和空串的问题,本例为hibernate

一张相片:
if(blob!=null)
    tbl.setPhoto(blob); 
另外一张:
 BASE64Decoder base64Decoder = new BASE64Decoder();
if(strPhoto!=null or "".equals(strPhoto)
   byte[] bytePhoto = base64Decoder.decodeBuffer(strPhoto);
   Blob blobPhoto   = Hibernate.createBlob(bytePhoto);
   tbl.setPhoto(blobPhoto);   

另外一种方法利用jdbc来处理

/**
  * 保存操作日志(POJO中的信息)
  * @param POJO 在Hibernate配置文件中存在的POJO对象
  * @param linkTblno 业务编号
  * @param applyType 业务类型
  * @param operType 操作类型 D-删除 U-修改 对控制信息:C-撤控  F-复控
  * @param process  流程状态信息
  * @throws Exception
  */
 public void saveLogFormPOJO(Serializable pojo,
          String linkTblno,
          String applyType,
          String operType,
          String process) throws Exception{
  Log.debug(this.getClass(), "保存操作日志(POJO中的信息)...");   
  String tableName = pojo.getClass().getName();//表名
  int d = tableName.lastIndexOf(".");
  tableName = tableName.substring(d+1);   
  Object object[] = this.getOperresult(pojo);   
  String operresult = (String)object[0];     
  InputStream photo = (InputStream)object[1];  
   
  this.saveLog(linkTblno, applyType, operType, process, tableName, operresult, photo);
  Log.debug(this.getClass(), "保存操作日志完成");  
 }
详细 见 PoperlogtblDAO