从 SQL 服务器 (SSIS) 引用视图时出现 ORA-01858 错误

ORA-01858 error when referencing a view from SQL Server (SSIS)

我们正在从 SQL 服务器 SSIS 包中调用 Oracle 视图。当我们从 SSIS 引用此视图时,我们收到以下 ORA-01858 错误。在 Oracle 中访问此视图没有问题。

ORA-01858: a non-numeric character was found where a numeric was expected

我已经缩小到我们从 varchar2 弹性字段中引入数据的列,如下所示。这个 varchar2 字段存储日期,我正在转换,如下所示。甲骨文对此没有问题。自从我们从 SQL 服务器开始调用它以来,我们 运行 就陷入了这个错误。

to_char(to_date(substr(wdj.dff_detail,1,9)),'YYYYMM')

提前致谢。

我们缺少一些关键信息:您究竟在该列中存储了什么?我知道,它是一个表示日期值的字符串,但是 - 采用哪种格式?

查看您发布的代码,日期值似乎占据了该字符串的前 9 个字符,所以我假设它是 dd-mon-yy

如果是这样,请看下面的例子:

SQL> alter session set nls_date_language = 'english';

Session altered.

SQL> with wdj (dff_detail) as
  2    (select '06-mar-20 20:31' from dual union all
  3     select '25-aug-19 13:30' from dual
  4    )
  5  select
  6                    substr(dff_detail, 1, 9)                          sbstr,
  7            to_date(substr(dff_detail, 1, 9), 'dd-mon-yy')            dsbstr,
  8    to_char(to_date(substr(dff_detail, 1, 9), 'dd-mon-yy'), 'yyyymm') ymdbstr
  9  from wdj;

SBSTR                                DSBSTR   YMDBST
------------------------------------ -------- ------
06-mar-20                            06.03.20 202003
25-aug-19                            25.08.19 201908

SQL>
  • 第 1 - 4 行:样本数据
  • 第 6 行:前 9 个字符的子字符串
  • 第 7 行:子字符串转换为日期,使用适当的格式掩码!这就是您在代码中遗漏的内容
  • 第 8 行:以 yyyymm 格式显示的日期(通过 to_char 函数)

当然,如果任何值不遵循我假定的格式(例如mar-06-20),如果它包含无效值(例如68-abc-83)等,它将不起作用

结论?不要将日期存储为字符串。