C# C语言中的PLSQL过程参数#

C# C语言中的PLSQL过程参数#,c#,oracle,C#,Oracle,我们的Oracle(11.2.0.4)db有一个包XXXX,我需要调用它的一个函数: function GET_CLOB( P_TYPE OUT varchar2, P_MSG OUT varchar2, P_BODY OUT clob ) return pls_integer; 我尝试使用C#中的以下代码调用它: 当并没有数据要从数据库中检索时,代码执行正常,我得到返回值,这意味着底层表是空的。但当有数据要检索时,我会出现以下错误: ORA-01017: Invalid

我们的Oracle(11.2.0.4)db有一个包XXXX,我需要调用它的一个函数:

function GET_CLOB(
   P_TYPE OUT varchar2,
   P_MSG  OUT varchar2,
   P_BODY OUT clob
 ) return pls_integer;
我尝试使用C#中的以下代码调用它:

当并没有数据要从数据库中检索时,代码执行正常,我得到返回值,这意味着底层表是空的。但当有数据要检索时,我会出现以下错误:

ORA-01017: Invalid Username/Password
ORA-06512:   "IBS.RTL", line 6505
ORA-06512:   "IBS.RTL", line 6515
ORA-06512:   "IBS.Z#aaaa", line 465
ORA-06512:   "IBS.Z$bbbb", line 71
ORA-06512:   "IBS.Z$bbbb", line 121
ORA-06512:   "IBS.Z$XXXX", line 433
ORA-06502: PL/SQL: : character string buffer too small
ORA-06512:   line 1

我尝试过使用参数类型和大小,但什么都做不了。有什么建议吗?

我认为您应该为所需的参数设置大小,因为此错误ORA-06502:PL/SQL::character string buffer太小可能是因为您没有设置参数大小

从您的代码中,我注意到您没有为参数“p_MSG”设置大小,只是将参数值设置为128

这是您用来添加“p_MSG”参数的重载

Add(string name, OracleDbType dbType, object val, ParameterDirection dir)
此方法使用提供的名称、数据库类型、参数值和方向将OracleParameter对象添加到集合中

那么我认为您应该编写这样的示例

var oParam = New OracleParameter("P_MSG", OracleDbType.Varchar2);
oParam.Direction = ParameterDirection.Output;
oParam.Size = 128;
cm.Parameters.Add(oParam);

您可能应该首先消除
无效用户名/密码
错误…我可以使用相同的登录名/密码从同一台计算机上的dbmanager(Embarcadero,如果有必要)执行该函数而不出错。我们可以查看完整的代码吗?增加字符串缓冲区,然后重试(PL/SQL::character string buffer太小)我没有程序代码。是的,我也发现了。必须创建OracleParameter变量并“手动”设置属性才能使其工作。
var oParam = New OracleParameter("P_MSG", OracleDbType.Varchar2);
oParam.Direction = ParameterDirection.Output;
oParam.Size = 128;
cm.Parameters.Add(oParam);