Oracle SSIS简单查询 - “Literal与格式字符串不匹配”

时间:2015-11-30 15:41:36

标签: oracle ssis odbc

我有一个SQL Server Integration Services ETL项目来从Oracle数据库获取数据。我正在使用ODBC源组件,并配置了连接管理器并正常工作。

在ODBC Source中,选中Connection Manager后,我会在下拉列表中获取所有表和视图。 问题是这个:我无法从某些的视图中获取数据。我收到这个错误:

enter image description here

即使我编写一个简单的SQL命令,我也会遇到同样的错误。

SELECT * FROM "SchemaName"."ViewName"

但是,如果我转到“列”选项卡,则所有列都会正确映射。

我已经检查了Oracle端的权限,一切似乎都没问题。我可以在同一模式中查询其他视图,但其中一些会给我这个错误。 正如您所看到的,我没有指定任何强制转换,我查询的视图没有日期列。

是否有人理解为什么会出现特定视图的错误? 感谢。

编辑:查询在Oracle中运行良好,因此问题不在View定义中。

2 个答案:

答案 0 :(得分:1)

此错误可能在执行视图SQL时发生,而不是在ODBC中发生,并且在有一个或多个无效值未通过转换格式的情况下发生。通常这发生在字符串到日期的转换上。我可以使用以下脚本复制它。

> SQL> create table mytemp(x varchar2(10)); 
> Table created.
> 
> SQL> create or replace view myview as select to_date(x,'yyyy/mm/dd')
> xdat from mytemp; 
> View created
> 
> SQL> insert into mytemp values ('1965/12/12'); 
> 1 row created.
> 
> SQL> commit; 
> Commit complete.
> 
> SQL> select * from myview;
> 
> XDAT     
> ---------  
> 12-DEC-65

是的,我已经确认这个观点很棒!

...直到

> 
> SQL> insert into mytemp values ('12121965');  
> 1 row created.
> 
> SQL> commit;  
> Commit complete.
> 
> SQL> select * from myview;
> 
> select * from myview
>                * 
> Error at line 1 ORA-01861: literal does not match format string

因此,视图中的SQL是有效的,从中进行选择的SQL是有效的,并且在一个包含错误数据的数据行进入之前一切正常。

在通过该链接执行的SQL中的某个地方,正在发生类似这样的事情。可能它在视野中。也许,如果select是插入的一部分,那么它在插入端格式化。但绝对这是在执行的SQL语句中某处进行数据转换的问题。

答案 1 :(得分:1)

问题不在您的查询中,也不在权限中。这个错误肯定来自视图本身。在从一种数据类型转换到另一种数据类型的任何地方都会出现问题,因此请检查TO_NUMBER,TO_DATE甚至TO_CHAR。在其中一个语句中,格式掩码(或您要转换的数据)无效。