Oracle.Dataaccess错误ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小

时间:2010-01-16 14:11:23

标签: .net oracle data-access

我正在从.NET应用程序调用存储过程。 proc返回Varchar2类型的out参数。为了胎儿 ch out参数我将参数作为OracleParameter传递给命令:

parm12 = new OracleParameter("testkey"
                              , OracleDbType.Varchar2
                              , out2
                              , ParameterDirection.Output);

当我执行proc时,我收到错误

PL/SQL: numeric or value error: character string buffer too small.

2 个答案:

答案 0 :(得分:7)

找到答案。

对于OUT参数,我将varchar的大小声明为最大值 - 32767并开始工作。

为简化起见,存储过程返回VARCHAR2类型的参数OUT。但是为了消耗.NET的输出,我传递的VARCHAR2没有任何大小。因此,分配用于接收reurn值的缓冲区空间为0字节。当proc返回的值超过分配的缓冲区(0字节)时,它会出错。

所以我在C#代码中指定了VARCHAR2-32767的最大值,它开始起作用了。)。

答案 1 :(得分:1)

在您的代码中out2是指定参数长度的参数。因此检查该变量中的值,因为它显然不足以让程序输出。