Ошибка 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 накладывает ненужные служебные данные.