Как устранить ошибку Oracle ORA-01790? - PullRequest
5 голосов
/ 08 декабря 2009

У меня есть два оператора выбора, к которым присоединился «союз». Выполняя это утверждение, я получил:

Сообщение об ошибке: Ошибка SQL: ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение 01790. 00000 - «выражение должно иметь тот же тип данных, что и соответствующее выражение»

Может быть, вы можете дать мне совет, как диагностировать эту проблему?

Ответы [ 7 ]

14 голосов
/ 08 декабря 2009

Не глядя на ваш SQL, я бы предположил, что у вас есть столбцы UNION, которые имеют разные типы данных.

10 голосов
/ 08 декабря 2009

Вот что найдено:

ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение

Причина: Элемент списка SELECT соответствует элементу списка SELECT с другим типом данных в другом запросе с тем же выражением набора.

Действие: Убедитесь, что все соответствующие элементы списка SELECT имеют одинаковые типы данных. Используйте функции TO_NUMBER, TO_CHAR и TO_DATE для явного преобразования данных.

Я не видел ваш запрос, но я предполагаю, что один выбор в вашем объединении не выбирает те же столбцы, что и другой.

3 голосов
/ 23 марта 2016

Очевидно, что проблема для плаката была решена более полувека назад, тем не менее, я хотел указать любому, кто читает этот пост в поисках помощи, что порядок выбранных свойств (столбцов) должен совпадать от одного объединенного оператора до следующий. Недостаточно просто сопоставлять имена и типы данных, хотя это в некотором смысле является основной причиной. Но из-за способа обработки операторов Union в Oracle можно получить ошибку ORA-01790 из-за несоответствия только в порядке расположения столбцов.

В моем случае у меня был запрос с UNION ALL из двух выборок. У одного выбора был столбец с именем «generic_column_name» в качестве 25-го элемента в выборе, а у другого выбора был тот же столбец с именем «generic_column_name» с тем же типом данных (я протестировал несколько способов с помощью жесткого кодирования, а также с помощью принудительного преобразования типов данных ). Однако у второго выбора этот элемент был на 19-м месте, поэтому все столбцы были смещены, и это вызвало ошибку ORA-01790.

3 голосов
/ 08 декабря 2009

Ошибка говорит вам, что вы объединяете столбцы с разными типами данных. Существуют функции оракула, которые преобразуют один тип в другой (например, «to_char»), вам придется конвертировать типы данных в общий формат или, по крайней мере, один в другой. Если вы разместите реальный запрос / типы, можно было бы быть более конкретным.

2 голосов
/ 08 декабря 2009

Вы должны убедиться, что соответствующие столбцы в вашем объединении имеют одинаковый тип данных. Самый простой способ - закомментировать столбцы один за другим, чтобы сузить их до столбца, а затем использовать явную функцию преобразования типов в одном из них, чтобы типы соответствовали.

1 голос
/ 09 декабря 2009

Как я уже упоминал в вопросе, я хотел бы получить ПРЕДЛОЖЕНИЯ о том, как решить мою проблему. Я включил по одному столбцу за раз в каждом операторе выбора и обнаружил, что в самом последнем столбце моего SQL UNION было несоответствие. Большое спасибо за участие и помощь, но я знал, что у меня несоответствие типов, ЧТО я не знал, так это как устранить неполадки.

1 голос
/ 08 декабря 2009

Вы попытались выполнить инструкцию SELECT (возможно, UNION или UNION ALL), и все запросы не содержали совпадающих типов данных в столбцах результата.

Техонтенет - ORA-01790

...