各位帮帮忙,我现在做的一个小项目里,有个奇怪的问题。在我的开发环境下一切都没问题,到了部署的环境会报ORA-01401: 插入的值对于列过大错误
而且不是什么功能都报错,只有一个调用预处理的insert语句会报错。如果在数据库里手动插入一条数据,然后在画面上打开编辑然后保存,没有问题。请问是什么问题呀。
首先插入的关键字不会超常,画面输入项都是一样的,排除了数据库驱动的问题,输入的都是英文的数据,只有两处用到了系统时间,TO_CHAR(SYSDATE, 'YYYY/MM/DD')存放到数据库的varchar2字段里。有谁能给些经验意见,不胜感激。

解决方案 »

  1.   

    是不是在预处理insert语句的时候,意外添加了空格、换行之类的东西,但是你没有看见。解决办法是:在出错的代码前添加类似 lengthb('你的出错的数据')的调试代码,把在实际插入前的确切长度得到,看是否真的是超出了列限制。
      

  2.   

    把insert   sql 贴出来,
      

  3.   

    把列属性大小设大一点。比如varchar(20)修改20为大点就行了
      

  4.   

    列长度不够,检查一下INSERT值
      

  5.   

    INSERT INTO VOC_QUESTIONNAIRE VALUES(  '00001',  ?,  ?,  ?,  ?,  TO_CHAR(SYSDATE, 'YYYY/MM/DD'),  ?,  NULL,  ?,  ?,  TO_CHAR(SYSDATE, 'YYYY/MM/DD'),  NULL,  ?,  ?)开发环境下和部署环境下的log信息都是上面的sql,可是就是在部署环境下会有超常的错误。
    字段定义的长度绝对没有问题,即便是画面上只输入一个英文字符也会出错。
    每个子段的定义除了关键字都可以是空。
    问题很可能是两个数据库环境不同,谁有这方面的经验那,不胜感激。
      

  6.   


    select LENGTH(TO_CHAR(SYSDATE, 'YYYY/MM/DD')) from dual 
    ---
    10你看一下varchar(??)  其中的问号的数据有没有大于等于10
      

  7.   

    要学会调试的方法。
    建议分别试试:
    insert into voc_questionnaire (col1) values('00001');
    insert into voc_questionnaire (col1,col2) values('00001',?);
    insert into voc_questionnaire (col1,col3) values('00001',?);
    ....
    看看到底是那个列的insert出错了。缩小范围,再分析原因
      

  8.   

    我也同意9楼,insert语句可以执行,我就是这么插入数据的。现在的情况是,java程序执行sql会有问题,在其他客户端或者在开发环境下执行也没有问题。我曾经想到是不是jdbc的版本问题,后来排除了,请问还有别的可能吗。不会是数据库服务器的版本不同造成的吧,这样的情况我还没有遇到过。
      

  9.   

    找到insert语句,缩小范围,一个一个排除吧!
      

  10.   

    desc 表名
    把你的开发库和生产库的结构输出来看看有没有差异
      

  11.   

    解决问题不是仅仅是怀疑,要实践啊。
    让你安装9楼的方法一条一条试试不就知道具体原因了。(试,当然是把他们写到代码中,不是在plsql中执行)目前,很多开发人员,说什么好呢?
      

  12.   

     TO_CHAR(SYSDATE, 'YYYYMMDD')
      

  13.   

    可以的话建议把Insert语句中的: TO_CHAR(SYSDATE, 'YYYY/MM/DD'),TO_CHAR(SYSDATE, 'YYYY/MM/DD')  两个先放到变量里再往数据库中插入,不确保能解决问题,以前曾经遇到过不同版本的数据库的插入语句的问题,尽量在插入语句中不要有太多的公式以及汇总函数可能会好一些。
      

  14.   

    还有就是可能跟开发用的Provider的Oracle驱动有关系,用Microsoft和Oracle本身提供的Oracle驱动会对日期的格式化产生不一样的结果,我曾经在这上面吃过很大的亏,至于是用Oracle本身的Provider可以还是Microsoft的可以,由于长时间没做开发了,一时也想不起来了!