Ошибка ORA-00932 при использовании полей выбора с объединением и CLOB
Прежде всего, это не дубликат этого вопроса. Если это так, извините, но я не смог решить свою проблему, прочитав ее.
Я получаю эту ошибку:
ORA-00932: inconsistent datatypes: expected - got CLOB
Когда я пытаюсь выполнить этот оператор SELECT:
SELECT TXT.t_txt
FROM CITADM.tb_avu_txt_grc GR
INNER JOIN CITADM.tb_avu_txt TXT
ON (GR.e_txt = TXT.e_txt and GR.u_txt = TXT.u_txt)
WHERE TXT.u_lin_ord = 1
UNION
SELECT TXT.t_txt
FROM CITADM.tb_avu_txt_grc_cvd GRC
INNER JOIN CITADM.tb_avu_txt TXT
ON (GRC.e_txt = TXT.e_txt and GRC.u_txt = TXT.u_txt)
WHERE TXT.u_lin_ord = 2
Выбранное поле (t_txt) имеет тип данных CLOB. Как вы можете видеть, это тот же столбец той же таблицы. Это утверждение относится к большему, я выделил часть, где у меня возникла эта проблема.
Большое спасибо.
Ответы
Ответ 1
Я считаю, что проблема заключается в использовании UNION
вместо UNION ALL
. Оператор UNION
будет комбинировать два набора и исключать дубликаты. Поскольку типы CLOB не могут сравниться, дублирующая часть исключения невозможна.
Использование UNION ALL
не будет пытаться выполнить дублирование (у вас, вероятно, нет дубликатов), поэтому он должен работать.
Ответ 2
Поскольку у меня были дубликаты, я не мог использовать UNION ALL. Это решение работает отлично, спасибо!
BTW:
Это imho единственный правильный ответ, потому что UNION ALL и UNION семантически отличаются друг от друга. Если у вас нет дубликатов, использование UNION накладывает ненужные служебные данные.