Ошибка ORA-01858 при обращении к представлению с сервера SQL (SSIS) - PullRequest
1 голос
/ 06 марта 2020

Мы вызываем Oracle представление из SQL пакета служб SSIS сервера. Когда мы ссылаемся на это представление из служб SSIS, мы получаем следующую ошибку ORA-01858. Это представление не вызывает проблем при обращении в Oracle.

ORA-01858: обнаружен не числовой символ c, где ожидалась числовая цифра c

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

to_char(to_date(substr(wdj.dff_detail,1,9)),'YYYYMM')

Заранее спасибо.

1 Ответ

1 голос
/ 06 марта 2020

Нам не хватает важной информации: что именно вы храните в этом столбце? Я знаю, это строка, которая представляет значение даты, но - в каком формате?

Глядя на опубликованный вами код, кажется, что значение даты занимает первые 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) и c.

Вывод? Не храните даты в виде строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...