2015-11-30 5 views
0

У меня есть проект ETL Project Integration Services SQL Server для получения данных из базы данных Oracle. Я использую компонент ODBC Source с настройкой и работой диспетчера подключений.Oracle SSIS Simple Query - «Literal не соответствует строке формата»

Внутри источника ODBC, с выбранным диспетчером подключений, я получаю все таблицы и представления в выпадающем списке. Проблема в том, что: Я не могу получить данные от Просмотров. Я получаю эту ошибку:

enter image description here

Даже если я пишу простой SQL команды, я получаю ту же ошибку.

Однако, если я перейду на вкладку «Столбцы», все столбцы отображаются правильно.

Я проверил разрешения на стороне Oracle, и все кажется ОК. Я могу запросить другие представления в той же схеме, но некоторые из них дают мне эту ошибку. Как вы можете видеть, я не указываю никаких кастингов, а запросы, которые я запрашиваю, не имеют столбцов даты.

Кто-нибудь понимает, почему эта ошибка возникает на определенных Представлениях? Спасибо.

EDIT: запрос хорошо работает в Oracle, поэтому проблема не в определении представления.

+1

Является ли это поле даты, которое неявно передается в строку в другом формате, чем тот, который ожидался из-за сбоя между параметрами NLS сервера и клиента? –

+0

Я буду смотреть дальше, но даже если я запустил такую ​​команду SQL: 'SELECT CODSEC FROM SchemaName.ViewName' , он возвращает ту же ошибку, даже если CODSEC является целым полем. – RodWall

+0

Ошибка ORA-01861 - ошибка, вероятно, происходит в представлении SQL, а не в ODBC.Попробуйте подключиться к БД с помощью SQL-клиента и запустить оператор select, чтобы подтвердить, что вы получаете ту же ошибку. Если это так, то оно находится внутри самого определения представления, и - снова - возможно, преобразование строки на дату или, возможно, число. –

ответ

1

Проблема не в вашем запросе, ни в разрешении. Эта ошибка, безусловно, исходит от самого представления. Проблема может возникать везде, где вы выполняете преобразование из одного типа данных в другой, поэтому проверьте TO_NUMBER, TO_DATE или даже TO_CHAR. В одном из этих утверждений маска формата (или данные, которые вы хотите преобразовать) является недопустимой.

+0

Да, проблема заключалась в преобразовании данных. Был TO_CHAR, когда он должен быть TO_DATE. Спасибо. – RodWall

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-заявлении.

+0

Майкл Бротон, вы правы. В предложении Where было сделано TO_CHAR. Когда я прокомментировал это, Integration Services мгновенно получил данные. Поскольку столбец имеет дату типа, он не может быть отправлен в CHAR. Я изменил бросок на TO_DATE, дал формат, и все получилось. Спасибо за все ваши ответы на мои вопросы, это было действительно полезно. – RodWall

Смежные вопросы