在需要数字的位置找到非数字字符-对于Oracle .Net数据类型

vvppvyoh  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(235)

我收到这个错误:
{“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#代码调用它会导致错误。

rslzwgfq

rslzwgfq1#

参数的名称不是描述性的,因此很难猜测您实际上可能传递给过程的内容。
但是:当使用 dates 时,会出现错误(ORA-01858)。我假设一些varchar2参数可能包含它,表示为字符串,然后在pr_my_proc中 * 转换 * 为真正的date数据类型值。然而,Oracle无法做到这一点,因为您提供的值与日期格式不匹配。
举例来说:

SQL> select to_date('09-oct-2023', 'dd.mm.yyyy') from dual;
select to_date('09-oct-2023', 'dd.mm.yyyy') from dual
               *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected

今天的日期实际上是2023年10月9日,但是-我将月份名称传递给to_date函数,而格式模型期望月份为两位数(mm)。
我建议你检查你传递给过程的内容,特别是当你说它在一个不同的环境下工作正常时,在这个环境中-大概-默认的日期格式与你传递给过程的值相匹配。

相关问题