如何在Oracle中比较两个CLOB值

时间:2020-03-05 18:59:30  来源:igfitidea点击:

我有两张桌子要赞扬。列之一是CLOB类型。我想做这样的事情:

select key, clob_value source_table
minus
select key, clob_value target_table

不幸的是,Oracle无法对Clob执行减号操作。我怎样才能做到这一点?

解决方案

回答

我们可以通过内置程序包访问数据吗?如果是这样,那么也许我们可以编写一个返回数据的字符串表示形式的函数(例如,数据上的某种哈希),那么我们可以

select key, to_hash_str_val(glob_value) from source_table
minus
select key, to_hash_str_val(glob_value) from target_table

回答

格式是这样的:

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