5

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

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

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

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

2 回答 2

7

找到了答案。

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

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

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

于 2010-01-16T15:32:06.937 回答
1

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

于 2010-01-16T14:37:25.867 回答