Ошибка с 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 шт):

Автор решения: 0xdb

В документации явно сказано, что 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 однозначно идентифицируются другими колонками, например: контрольная сумма, длина, дата последнего изменения, источник итд.

→ Ссылка