ORA-01722: проблема с недопустимым типом номера в oracle

#oracle #sqldatatypes

#Oracle #sqldatatypes

Вопрос:

У меня проблема с типом данных и связью между двумя таблицами давайте предположим, что у меня есть две таблицы, как показано на рисунке

  • Первая таблица: прикрепленный _file. Идентификатор coulmn — это число
  • Вторая таблица: FN_Transaction. идентификатор coulmn равен varchar(20)

введите описание изображения здесь

Идентификатор в FN_Transaction имеет четыре случая

  • Идентификатор равен нулю, что означает отсутствие вложенного файла
  • Идентификатор содержит текст в виде ячейки «Нет», что означает, что вложенного файла нет
  • Идентификатор начинается с 0, но он будет равен идентификатору в прикрепленной таблице _file, например 01222 = 1222
  • Идентификатор в FN_Transaction равен идентификатору в прикрепленном _file без 0, например, 2344 = 2344

давайте посмотрим на запрос

 with docs as 
  (
SELECT
ID,
COUNT(type) fileNo,              
MAX(Date) date
FROM
Attached_file
GROUP BY
ID
)

Select 
InvoiceNo, 
fileNo,
date,
Amount
from 
FN_transaction x1
left join  docs x2 on 
(Trim(x1.ID) = x2.ID)
 

ошибка, которую я получил

Отчет об ошибке — ошибка SQL: ORA-12801: ошибка, о которой сигнализировал сервер параллельных запросов P034, (1) ORA-01722: недопустимый номер 12801. 00000 — «ошибка, о которой сигнализировал сервер параллельных запросов %s» * Причина: сервер параллельных запросов достиг состояния исключения. * Действие: проверьте причину следующего сообщения об ошибке и обратитесь к руководству по исправлению ошибок для соответствующего действия.

Есть ли у вас представление о том, как обрабатывать столбцы такого типа? Пожалуйста, сообщите

Ответ №1:

Вы можете использовать default on conversion error предложение в TO_NUMBER функции (введенное в 12.2) следующим образом:

 ON ( to_number(X1.ID default null on conversion error) = X2.ID )
 

Обратите внимание, что это 01222 будет автоматически преобразовано в число 1222 . символ NO будет преобразован в NULL because of default on conversion error и не будет соответствовать условию соединения (которое удовлетворяет вашему требованию)

Комментарии:

1. Спасибо за ответ, я попытался применить этот синтаксис, но получил другую ошибку. поэтому я не уверен, что ошибка связана с круглыми скобками или моей старой версией

2. 00907. 00000 — «отсутствует правая скобка»

3. Версия 4.1.3.20