如何在Oracle中比较两个CLOB值

8

我有两个表需要比较,其中一个列的类型是CLOB。我想做类似于这样的事情:

select key, clob_value source_table
minus
select key, clob_value target_table

很遗憾,Oracle无法对CLOB执行减法运算。我该怎么办?


glob 是指 clob 吗? - William Robertson
2个回答

17

格式如下:

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

2

您能否通过内置包访问数据?如果可以,那么也许您可以编写一个函数来返回数据的字符串表示形式(例如数据的某种哈希值),然后您可以执行以下操作:

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... 请参见这里 - wolφi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接