OleDb驱动调用Oracle存储过程出错:ORA06502

  好久没来这里写东西了,一直忙着修改系统的Bug和准备考试。大部分时间都用来学习项目管理的知识,新技术也研究和应用的少了,都不知道写点什么东西可好,也没有要写的东西了。

     正好这几天在修改Bug过程中遇到了一个棘手的问题,数据库采用的是Oracle 10g,应用服务器的数据库客户端是Oracle 9i。连接数据库是采用OleDb驱动方式,服务器上必须要安装Oracle的Oledb驱动补丁,否则就会出错,之前也是因为没安装这个驱动,遇到了很大麻烦,也花费了好多精力去解决问题。

  在一个功能中需要调用存储过程,返回过程处理结果,没有其它任何操作,跟踪执行到ExecuteNonQuery();时,就会执行异常处理,存储过程完全正确,显示错误如下:

  ORA-06502: PL/SQL: numeric or value error: character string buffer too small
  ORA-06512: At PUBLISH_ORG_MONTHLY, line 291
  ORA-01461: can bind a LONG value only for insert into a LONG Column
  ORA-06512: at line 1
 
  之前也找了各种方法解决都没有成功,还以为是因为Oracle版本不一致,或者ODAC1020221-OLEDB驱动补丁不一致的原因造成,迫于无奈,把Oracle 9i卸了,重新装了10g和驱动补丁,结果调用存储过程操作还是不通过。

  没办法了,下班时间也到了,第二天在解决吧。好像早上一来,头脑也清醒了许多,就检查了一下代码中给存储过程传递参数的代码,发现参数名称和存储过程里是一致的,惊讶的还发现有个参数顺序和存储过程里的不一致,然后就立马调整顺序,结果就执行通过了。

  心里的一块石头总算是放下了,因为系统25号就要上线呀,不解决这几天日子可都不好过~~~

  这也算是一个经验吧,拿出来与大家共同分享,也提醒自己以后别在犯类似的错误,这样可以节省好多精力。

作者:zeke     
          出处:http://zhf.cnblogs.com/
          本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

原文地址:https://www.cnblogs.com/ZHF/p/2086254.html