【发布时间】:2020-05-09 10:00:27
【问题描述】:
我在 oracle 中有一个具有输入字段 varchar2 和 number 的过程。我正在使用 Oracle.DataAccess.dll 从我的 .Net 代码中添加参数。我遇到了一个例外,例如
ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误\nORA-06512:在第 1 行
如果我直接从 oracle sql developer 运行程序,它工作正常。
代码:-
OracleCommand cmd = (OracleCommand)_dbFactory.CreateCommand();
try
{
cmd.Connection = (OracleConnection)_conOracle;
_conOracle.Open();
cmd.CommandText = "SERVICE_STATUS";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add("PANUMBER", OracleDbType.Int32).Value = 10;
cmd.Parameters.Add("PA_LINK", OracleDbType.Varchar2).Value = "Test";
cmd.Parameters.Add("PO_MSG", OracleDbType.Varchar2, 4000).Direction = System.Data.ParameterDirection.Output;
try
{
cmd.ExecuteScalar();
}
catch(Exception ex1) {
log.Debug("Exception ex1 "+ ex1.Message+" inner--"+ex1.InnerException);
}
string isValid = cmd.Parameters["PO_MSG"].Value.ToString();
if (isValid == "SUCCESS")
return true;
else
return false;
}
catch (Exception ex)
{
throw ex;
}
finally
{
_conOracle.Close();
}
程序
create or replace
PROCEDURE SERVICE_STATUS( panumber number, pa_link varchar2 default NULL, po_msg OUT VARCHAR2 )
is
BEGIN
--logic comes here
END;
【问题讨论】:
-
“逻辑来到这里”可能是负责任的。似乎您在某处对包含除数字以外的其他内容的字符串执行 TO_NUMBER ;例如,TO_NUMBER('12F') 将失败。
-
如果你注释掉所有
--logic comes here但分配po_msg := "Some Test Message";,你还有问题吗? -
@Littlefoot 我明白了,但我通过了数字字段但它失败了。我没有给出这样的转换。
-
@DmitryBychenko 我没有编辑程序的权限。所以我无法检查。
-
尝试将
OracleDbType.Int32切换到OracleDbType.Decimal- Oracle 将不带精度的数字映射到 .NET 十进制而不是整数 - 另外您应该调用ExecuteNonQuery...