0

こんにちは、同じ列の2つのCLOBを比較したいと思います。これを行うには、最初にそれらを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;

上記のコードは機能しますが、「106」をs1.signaturedescriptionの長さに置き換えたいと思います。私はこれを次のようにして達成しようとしました:

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

dbms_lob_compare関数を使用する必要があります。

これについては、次のリンクをお読みください。

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

于 2012-11-27T21:17:05.687 に答える