如何比较多个值的Clob列?

时间:2014-11-26 11:57:40

标签: oracle clob

有谁能告诉我如何比较oracle中具有多个值的clob数据类型的列?

For one value we are comparing like
dbms_lob.compare(attr_value,'A')=0

同样,如果我想知道attr_value是否在('A','B','C','D')。我试过这个:

dbms_lob.compare(attr_value,'A')=0 or  dbms_lob.compare(attr_value,'B')=0 or ...

这不能给我正确的结果。还有其他办法吗?

3 个答案:

答案 0 :(得分:0)

由于您似乎并不想将大规模的CLOBS与其他大量CLOBS进行比较,最快的方法是只比较CLOB的子串:

WHERE DBMS_LOB.SUBSTR( attr_value, 4000, 1 ) IN ('A','B','C')

此处4000可以替换为所有比较值的最大长度。

如果你真的想比较大量的CLOBS我不认为选择是正确的方法,你 应该重新修改你的应用程序逻辑...

答案 1 :(得分:0)

或者应该正常工作。你也可以试试这个:

SELECT * FROM your_tab WHERE CAST(s as VARCHAR2(2)) IN ('A', 'B', 'C', 'D');

但我不确定表现。

答案 2 :(得分:0)

DBMS_LOB.COMPARE在两个LOB对象之间进行精确比较。文档说:

  

如果数据在范围内完全匹配,则COMPARE返回零   由offset和amount参数指定。否则,非零   返回INTEGER。

在Oracle 11g上,您可以使用REGEXP_INSTR函数:

SELECT REGEXP_INTR(attr_value,'A|B|C|D|E') from dual; 

我希望它有所帮助。