Oracle数据访问ORA-06512:字符串缓冲区太小

72qzrwbm  于 2023-08-04  发布在  Oracle
关注(0)|答案(2)|浏览(224)

当我调用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;

zengzsys

zengzsys1#

这显然不是你想要的,但似乎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参数,而使用标量返回值或表函数。

j7dteeu8

j7dteeu82#

必须使用5个参数作为过程的OUT参数。所以我在这里添加了null:

cmd.Parameters.Add("P_OUT_MESSAGE", OracleDbType.Varchar2, 1000, null, ParameterDirection.Output)

字符串
对于4,它将1000视为对象值而不是大小。

相关问题