У меня есть две таблицы, на которые я хотел бы пожаловаться. Один из столбцов - это тип CLOB. Я бы хотел сделать что-то вроде этого:
select key, clob_value source_table
minus
select key, clob_value target_table
К сожалению, Oracle не может выполнять минусовые операции над clobs. Как я могу это сделать?


Можете ли вы получить доступ к данным через встроенный пакет? Если это так, то, возможно, вы могли бы написать функцию, которая возвращала бы строковое представление данных (например, какой-то хэш данных), тогда вы могли бы сделать
select key, to_hash_str_val(glob_value) from source_table
minus
select key, to_hash_str_val(glob_value) from target_table
Да, мы использовали это в производстве для сравнения пары таблиц до и после. В итоге мы использовали встроенный dbms_crypto.hash ... См. здесь
Формат такой:
dbms_lob.compare(
lob_1 IN BLOB,
lob_2 IN BLOB,
amount IN INTEGER := 18446744073709551615,
offset_1 IN INTEGER := 1,
offset_2 IN INTEGER := 1)
RETURN INTEGER;
Если dbms_lob.compare (lob1, lob2) = 0, они идентичны.
Вот пример запроса на основе вашего примера:
Select key, glob_value
From source_table Left Join target_table
On source_table.key = target_table.key
Where target_table.glob_value is Null
Or dbms_lob.compare(source_table.glob_value, target_table.glob_value) <> 0
globозначаетclob?