Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SSIS简单查询-“;文字与格式字符串“不匹配”;_Oracle_Ssis_Odbc - Fatal编程技术网

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

Oracle SSIS简单查询-“;文字与格式字符串“不匹配”;,oracle,ssis,odbc,Oracle,Ssis,Odbc,我有一个SQL Server Integration Services ETL项目,用于从Oracle数据库获取数据。我正在使用一个ODBC源组件,该组件配置了连接管理器并正在运行 在ODBC源代码中,选中连接管理器后,我将获得下拉列表中的所有表和视图问题在于:我无法从一些视图中获取数据。我得到这个错误: 即使我编写了一个简单的SQL命令,也会出现同样的错误 SELECT * FROM "SchemaName"."ViewName" 但是,如果转到“列”选项卡,所有列都会正确映射 我已经检查

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

在ODBC源代码中,选中连接管理器后,我将获得下拉列表中的所有表和视图问题在于:我无法从一些视图中获取数据。我得到这个错误:

即使我编写了一个简单的SQL命令,也会出现同样的错误

SELECT * FROM "SchemaName"."ViewName"
但是,如果转到“列”选项卡,所有列都会正确映射

我已经检查了Oracle方面的权限,一切似乎都正常。我可以在同一模式中查询其他视图,但其中一些视图会出现此错误。 如您所见,我没有指定任何强制转换,并且我查询的视图没有日期列

有人知道为什么会在特定视图中出现此错误吗? 谢谢


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

此错误可能发生在执行视图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中的某个地方,类似的事情正在发生。可能是在视图中。也许,如果选择是插入的一部分,那么它将在插入端格式化。但这绝对是执行的SQL语句中某个地方的数据转换问题。

问题不在查询中,也不在权限中。这个错误肯定来自视图本身。在从一种数据类型转换到另一种数据类型的任何地方都可能出现问题,所以请检查to_NUMBER、to_DATE甚至to_CHAR。在其中一条语句中,格式掩码(或要转换的数据)无效。

可能是其中一个日期字段,由于服务器和客户端NLS参数之间的不匹配,该字段被隐式转换为与预期格式不同的字符串?我将进一步研究,但是,即使我运行这样的SQL命令:
SELECT CODSEC FROM SchemaName.ViewName
它返回完全相同的错误,即使CODSEC是一个整数字段。这是一个ORA-01861错误-错误可能发生在视图SQL中,而不是ODBC中。尝试使用SQL客户端连接到DB,并运行select语句以确认收到相同的错误。如果是这样的话,那么它就在视图定义本身之内,而且——再一次——可能是字符串到日期的转换,或者可能是到数字的转换。我已经在Oracle中测试了这个查询,它运行起来没有问题。再次感谢。您在同一个数据库上测试了它,数据与错误发生的位置相同?如果是这样,映射中是否有任何隐式转换(即源是varchar,目标是日期,反之亦然?)Michael Broughton,你是对的。Where子句中有一个TO_CHAR转换。当我发表评论时,Integration Services立即成功地获得了数据。由于列的类型为date,因此无法将其强制转换为CHAR。我把演员阵容改成了最新的,给出了格式,一切都正常了。谢谢你对我的问题的所有回答,这真的很有帮助。是的,问题是数据转换。当它应该是最新的时候,有一个TO_CHAR。非常感谢。