从 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
)等,它将不起作用
结论?不要将日期存储为字符串。
我们正在从 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
)等,它将不起作用
结论?不要将日期存储为字符串。