我有一个SQL Server Integration Services ETL项目来从Oracle数据库获取数据。我正在使用ODBC源组件,并配置了连接管理器并正常工作。
在ODBC Source中,选中Connection Manager后,我会在下拉列表中获取所有表和视图。 问题是这个:我无法从某些的视图中获取数据。我收到这个错误:
即使我编写一个简单的SQL命令,我也会遇到同样的错误。
SELECT * FROM "SchemaName"."ViewName"
但是,如果我转到“列”选项卡,则所有列都会正确映射。
我已经检查了Oracle端的权限,一切似乎都没问题。我可以在同一模式中查询其他视图,但其中一些会给我这个错误。 正如您所看到的,我没有指定任何强制转换,我查询的视图没有日期列。
是否有人理解为什么会出现特定视图的错误? 感谢。
编辑:查询在Oracle中运行良好,因此问题不在View定义中。
答案 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。在其中一个语句中,格式掩码(或您要转换的数据)无效。