2015-09-09 79 views
0

我收到了返回的函数。Oracle动态参数错误

我正在使用dapper,并在执行此查询时遇到问题。

OracleDynamicParameters DictionaryParams = new OracleDynamicParameters(); 

DictionaryParams.Add(name: "id", value: id,direction: ParameterDirection.Input); 
DictionaryParams.Add(name: "Return_Value",oracleDbType: OracleDbType.Varchar2,direction: ParameterDirection.ReturnValue); 

con.Execute("function_name", DictionaryParams, commandType: CommandType.StoredProcedure); 

string a; 

a = DictionaryParams.Get<string>("Return_Value"); 

而且我得到了一个Oracle错误:

ORA-06502: PL/SQL: error number or value :character string buffer too small

我试图给一个大小为返回值,但这并没有工作,我也试图弄清楚,但一切都没有工作。

有人可以看看这个吗?

+0

您是否尝试了OracleDbType.Varchar2的值? – tdbeckett

+0

错误是否可以在过程调用本身?如果你直接从sqlplus调用该过程,它是否工作? – OldProgrammer

+0

看到我的回答:) –

回答

0

我想这个问题来自于使用Char是一个固定长度的字符串。
在您的PL-SQL代码的某处,您尝试将长度为N的Char或varchar2字符串放入长度为M的字符M中,其中M> N

2

您需要指定varchar2的最大大小。

实施例:

parameters.Add( “P_OUTPUT”,DBTYPE:OracleDbType.Varchar2,方向:ParameterDirection.Output,大小:1000);