oracle升级后报 06502,也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小...

场景:

.Net程序调用Oracle方法 command.ExecuteNonQuery()执行存储过程;弹出如标题异常信息。

存储过程有4个输入参数,一个输出参数。一旦执行到给输出参数赋值的时候就报错。但在Plsql环境下调度,是正常的。

分析:

查阅各帖子,都说是变量长度不够,但设置也无果。

后来,怀疑是不是设置参数顺序有问题,调整,搞定。

解决:

存储过程中定义的参数,第一个为out,虽然在设置参数时,用了参数名,但好像没起什么作用。所以,把输出参数第一个设置,与定义顺序一致,就OK了。

另外:输出参数长度是必须指定的。这里,我是通过给定一个无意义的初始值(做占位符用)。

//定义输出参数

Dictionary dicOut = new Dictionary();

dicOut.Add("djdh", "11111111111111111111");

定义存储过程:

CREATE OR REPLACE PROCEDURE gendh(djdh OUT VARCHAR2,

djlx IN VARCHAR2,

rq IN VARCHAR2,

dwdm IN VARCHAR2,

csfs IN VARCHAR2) IS……

后台服务中的存储过程方法定义:

// 设置输出参数

foreach (KeyValuePair kvp in dicParaOut)

{

command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value.ToString().Length).Direction = ParameterDirection.Output;

}

//设置输入参数

foreach (KeyValuePair kvp in dicIn)

{

command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value, ParameterDirection.Input);

}

时间: 05-29

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值