Oracle数据访问ORA-06512:字符串缓冲区太小
本文关键字:缓冲区 字符串 数据 访问 ORA-06512 Oracle | 更新日期: 2023-09-27 18:19:03
当我调用GetTest
时,我得到这个错误:
字符串缓冲区太小ORA-06512
我的c#方法:
public string GetTEST()
{
using (var conn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Dbconnection"].ConnectionString))
{
OracleCommand cmd = new OracleCommand("Package.GetTEST");
cmd.BindByName = true;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2,1000,ParameterDirection.Output);
cmd.ExecuteNonQuery();
var t = cmd.Parameters["P_OUT_MESSAGE"].Value;
}
}
Oracle过程:
PROCEDURE GetTEST
(
P_OUT_MESSAGE OUT VARCHAR2
)
IS
BEGIN
p_out_message := 'Un problème a été signalé pour votre propriété. Veuillez communiquer avec le Service de l''évaluation au 418 111-7878 ou à l''adresse test@tesst.com';
END;
这显然不是您想要的,但似乎ODP。.NET使用.NET端参数的长度作为out参数的长度…
这将解决您的问题:
cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2, 32767, "x".PadRight(500, 'x'), ParameterDirection.Output);
但是这样更好,虽然不完全正确,但它可以工作:
cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Clob, ParameterDirection.Output);
如果可能的话,最好避免使用out
参数,而使用标量返回值或表函数。
程序的OUT参数必须使用5个参数。所以我在这里添加了null
cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2, 1000, null, ParameterDirection.Output)
对于4,它将1000作为对象值而不是大小