有谁能告诉我如何比较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 ...
这不能给我正确的结果。还有其他办法吗?
答案 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;
我希望它有所帮助。