Ошибка с DISTINCT для CLOB колонки: ORA-00932: inconsistent datatypes: expected - got CLOB
При указании ключевого слова DISTINCT для CLOB колонки в запросе получаю ошибку:
ORA-00932: inconsistent datatypes: expected - got CLOB
Запрос такого вида:
select distinct myclobcolumn, type from table
Пробовал использовать to_char(), но все равно получаю ошибку, так как размер буфера для VARCHAR2 меньше, чем фактический размер CLOB.
Ответы (1 шт):
В документации явно сказано, что DISTINCT не допускает LOB колонок:
You cannot specify DISTINCT if the select_list contains LOB columns.
Желаемый результат можно получить таким запросом:
create table docs (id int primary key, doc clob)
/
insert into docs
select rownum, trim (column_value)
from xmlTable ('"content1","content1","content2"')
/
select * from docs d1
where not exists (
select * from docs d2
where dbms_lob.compare (d1.doc, d2.doc) = 0
and d1.rowid > d2.rowid)
/
ID DOC
---------- ---------------------------------------
1 content1
3 content2
PS: Но побайтное/посимвольное сравнение LOB значений довольно редкая операция. Обычно LOB однозначно идентифицируются другими колонками, например: контрольная сумма, длина, дата последнего изменения, источник итд.