当我致电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;
答案 0 :(得分:5)
这显然不是你想要的,但似乎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
参数并使用标量返回值或表函数。