我收到这个错误:
{“ORA-01858:在需要数字的地方找到非数字字符”}
调用我的存储过程时:
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromMinutes(GlobalVariables.CommandTimeOut)))
{
ds = DataHelper.FillDS(dataAccessLayer, GlobalVariables.ConnectionString, "pr_my_proc", new Dictionary<string, DlmsParameter>() {
{ "pc", new CustomParameter() { Name = "pc", ParameterDirection = ParameterDirection.Input, ParamType = "VARCHAR2", Value = pc} },
{ "sp", new CustomParameter() { Name = "sp", ParameterDirection = ParameterDirection.Input, ParamType = "VARCHAR2", Value = sp }},
{ "pt", new CustomParameter() { Name = "pt", ParameterDirection = ParameterDirection.Input, ParamType = "INT64", Value = Convert.ToInt64(pt)} },
{ "rt", new CustomParameter() { Name = "rt", ParameterDirection = ParameterDirection.Input, ParamType = "VARCHAR2", Value = rt } },
{ "rv", new CustomParameter() { Name = "rv", ParameterDirection = ParameterDirection.Input, ParamType = "VARCHAR2", Value = rv.ToUpper() } }
},
new string[] { "AD" });
}
我的存储过程是:
CREATE OR REPLACE PROCEDURE pr_my_proc
(
pc VARCHAR2,
sp VARCHAR2,
pt NUMBER,
rt VARCHAR2,
rv VARCHAR2,
RS1 OUT ReturnType.GenericRecordSet
)
使用exec
命令执行存储过程成功运行,但从C#代码调用它会导致错误。
1条答案
按热度按时间rslzwgfq1#
参数的名称不是描述性的,因此很难猜测您实际上可能传递给过程的内容。
但是:当使用 dates 时,会出现错误(ORA-01858)。我假设一些
varchar2
参数可能包含它,表示为字符串,然后在pr_my_proc
中 * 转换 * 为真正的date
数据类型值。然而,Oracle无法做到这一点,因为您提供的值与日期格式不匹配。举例来说:
今天的日期实际上是2023年10月9日,但是-我将月份名称传递给
to_date
函数,而格式模型期望月份为两位数(mm
)。我建议你检查你传递给过程的内容,特别是当你说它在一个不同的环境下工作正常时,在这个环境中-大概-默认的日期格式与你传递给过程的值相匹配。