从 C# 调用 oracle 函数时出现 plsql 数值错误 - 请告诉我如何消除该错误。
PL/SQL: numeric or value error: character string buffer too small
代码:
create or replace function testdotnet(h1 varchar2)
return varchar2
as
x varchar2(250);
begin
select 'hello' into x from dual;
return x;
end;
C# 代码:
string CommandStr = "APPS.testdotnet";
using (OracleConnection conn = new OracleConnection("User Id=apps;Password=***;Data Source=***"))
using (OracleCommand cmd = new OracleCommand(CommandStr, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("h1", OracleDbType.Varchar2).Value = "aaa";
cmd.Parameters.Add("x", OracleDbType.Varchar2, 40000).Direction = ParameterDirection.ReturnValue;
cmd.Parameters["x"].Size = 255;
cmd.Parameters["h1"].Size = 255;
conn.Open();
cmd.ExecuteNonQuery();
Response.Write( cmd.Parameters["x"].Value.ToString());
}
最佳答案
VARCHAR2
的最大大小为 32,767 字节,不可能为 40,000。
改变
cmd.Parameters.Add("x", OracleDbType.Varchar2, 40000).Direction = ParameterDirection.ReturnValue;
到
cmd.Parameters.Add("x", OracleDbType.Varchar2, 32767).Direction = ParameterDirection.ReturnValue;
或者如果您需要更大的数据,请使用CLOB
。
关于c# - 使用C#调用Oracle函数时出现字符串缓冲区太小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920552/