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

moe*_*e11 5 .net oracle data-access

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

parm12 = new OracleParameter("testkey"
                              , OracleDbType.Varchar2
                              , out2
                              , ParameterDirection.Output);
Run Code Online (Sandbox Code Playgroud)

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

PL/SQL: numeric or value error: character string buffer too small.
Run Code Online (Sandbox Code Playgroud)

moe*_*e11 7

找到了答案.

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

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

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


APC*_*APC 1

在您的代码中out2,参数指定了参数的长度。因此,请检查该变量中的值,因为显然它对于过程的输出来说不够长。