0

您好,我想比较同一列中的两个 CLOBS。为此,我知道我必须首先将它们转换为 varchar。

我想从查询中检索的字符串始终具有这样的结构,即一个字符串是另一个字符串的子集。这意味着一个字符串包含另一个字符串。总是从 1...n 开始

因此,如果 string1 的长度为 k,而 string2 的长度为 n,其中 k < n,那么 string2 匹配 string1 到 k。情况总是如此。n!= k

无论如何,下面是我的代码,我无法将 CLOB 相互映射。我从来没有得到任何结果。到目前为止,我的方法是将较长的字符串转换为较短的字符串,然后检查它们是否匹配。然而这不起作用。我没有得到任何结果。

SELECT 
 s1.signaturedescription,
 s2.signaturedescription,
 s1.signdate,
 s2.signdate
FROM
signature s1,
signature s2
WHERE
s1.signatureid = 'VerificationSignature'
AND
s2.signatureid = 'EbrCorrectActualValues'
AND
 s1.username = s2.username
AND 
 dbms_lob.compare(s1.signaturedescription, s2.signaturedescription, 106, 1, 1) = 0;

上面的代码有效,但是我想用 s1.signaturedescription 的长度替换“106”。我尝试通过执行以下操作来完成此操作:

dbms_lob.compare(s1.signaturedescription, s2.signaturedescription, length((TO_CHAR(SUBSTR(s1.signaturedescription,1,4000)))), 1, 1) = 0;

然而,这不起作用。我没有得到任何返回的结果。你知道如何将 106 更改为 s1.signaturedescription 的长度吗?

谢谢

4

1 回答 1

0

You should use dbms_lob_compare function.

Read the following link about this:

http://dba-oracle.com/t_compare_clob_columns_dbms_lob.htm

于 2012-11-27T21:17:05.687 回答