Oracle "Неверный номер", вызванный функцией to_char

У меня есть следующий запрос SQL, который ищет дубликаты значений в таблице (два значения, которые являются нулевыми, должны быть классифицированы как дубликаты, следовательно, использование nvl):

select * from PersonLinkTable personLink
where personLink.RefPerson = 100
and nvl(to_char(personLink.PersonLinkType), '###') = nvl(to_char(PersonLinkTable.PersonLinkType), '###')  // Repeats for required columns

Третья строка повторяется для необходимых столбцов и генерируется автоматически в случае добавления новых столбцов в будущем. Проблема в том, что когда я добавил to_char, это было проверено и вызвало ошибку Oracle "Недопустимый номер". Я считаю, что to_char необходим в случае добавления каких-либо столбцов даты в будущем.

Почему использование to_char таким образом приведет к ошибке "Неверное число", и как правильно ее использовать? Типы столбцов на данный момент: varchar2, char и number.

Этот запрос корректно работает на SQL Server с некоторыми изменениями - нет to_char, isnull вместо nvl, а нулевые значения заменяются пустыми строками вместо '###'. Это часть более крупного запроса, и вокруг него "и не существует".

1 ответ

Решение

To_Char ожидает получить число в качестве аргумента по умолчанию. Если он получает символьную строку, он попытается неявно преобразовать строку в число, и это вызовет это сообщение об ошибке, если строка не может быть преобразована.

Если столбец имеет символьный тип, не пытайтесь преобразовать его в строку.

Другие вопросы по тегам