Sql 如何比较Oracle中的两个CLOB值

Sql 如何比较Oracle中的两个CLOB值,sql,oracle,Sql,Oracle,我想订两张桌子。其中一列是CLOB类型。我想这样做: select key, clob_value source_table minus select key, clob_value target_table 不幸的是,Oracle无法对CLOB执行减号操作。我如何才能做到这一点?您可以通过内置软件包访问数据吗?如果是这样,那么也许您可以编写一个返回数据的字符串表示形式的函数(例如数据上的某种散列),然后您可以这样做 select key, to_hash_str_val(glob_value

我想订两张桌子。其中一列是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
选择键,全局值
从源\表左连接目标\表
On source_table.key=target_table.key
其中target_table.glob_值为空
或dbms_lob.compare(源_table.glob_值、目标_table.glob_值)0

glob
是否表示
clob
?是的,我们已经在生产中使用它来比较前后一对表。我们最终使用了内置的
dbms\u crypto.hash
。。。看见