Как устранить ошибку Oracle ORA-01790?
У меня есть два оператора select, Соединенных "union". При выполнении этого утверждения у меня есть:
Отчет об ошибке:
Ошибка SQL: ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение
01790. 00000 - "выражение должно иметь тот же тип данных, что и соответствующее выражение"
Может быть, вы посоветуете мне, как диагностировать эту проблему?
7 ответов:
Не глядя на ваш SQL, я бы предположил, что у вас есть столбцы, которые объединяются, которые имеют различные типы данных.
Вот что найдено:
ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение
Причина: элемент списка выбора соответствует элементу списка выбора с другим типом данных в другом запросе того же выражения набора.
Действие: Убедитесь, что все соответствующие элементы списка выбора имеют одинаковые типы данных. Используйте функции TO_NUMBER, TO_CHAR и TO_DATE для явного преобразования данных.
Я не видел вашего запроса., но я предполагаю, что один выбор в вашем союзе не выбирает те же столбцы, что и другой.
Ошибка говорит вам, что вы объединяете столбцы с разными типами данных. Есть функции oracle, которые преобразуют один тип в другой (например, "to_char"), вам нужно преобразовать типы данных в общий формат или, по крайней мере, один в другой. Если вы разместите фактический запрос / типы, то можно будет быть более конкретным.
Необходимо убедиться, что соответствующие столбцы в объединении имеют одинаковый тип данных. Проще всего было бы закомментировать столбцы один за другим, чтобы сузить их до столбца, а затем использовать явную функцию преобразования типов в одном из них для сопоставления типов.
Вы попытались выполнить инструкцию SELECT (вероятно, UNION или UNION ALL), и все запросы не содержали соответствующие типы данных в результирующих столбцах.
Как я уже упоминал в вопросе, я хотел бы иметь предложения по устранению моей проблемы. Я включил по одному столбцу за раз в каждом операторе select и обнаружил, что у меня есть несоответствие в самом последнем столбце моего SQL UNION. Большое спасибо за участие и помощь, но я знал, что у меня есть несоответствие типа, чего я не знал, так это как устранить неполадки.
Очевидно, что проблема с плакатом была решена более полувека назад, тем не менее я хотел бы указать всем, кто читает этот пост в поисках помощи, что порядок выбранных свойств (столбцов) должен соответствовать от одного объединенного утверждения к следующему. Недостаточно просто иметь совпадающие имена и типы данных, хотя это в некотором смысле является основной причиной. Но из-за того, как операторы Union обрабатываются в Oracle, можно получить ошибку ORA-01790 из-за несоответствия в только порядок столбцов.
В моем случае у меня был запрос с объединением всех двух выборок. Один выбрать есть столбец с именем "generic_column_name" как 25-й пункт В выбрать и другой выбор был тот же столбец с именем "generic_column_name" одного и того же типа данных (я проверил несколькими способами посредством жесткого кодирования, а также с помощью принудительного преобразования типов данных). Однако у второго выбора Этот пункт был на 19-м месте, поэтому все столбцы оттуда были смещены, и это вызвало Ошибка ORA-01790.
Comments