检查clob是否包含字符串oracle

时间:2017-05-17 12:35:10

标签: sql oracle clob

目前我使用此代码to_char(CLOB_COLUM) like %s进行查询,但以下内容对于非常大的clob无效。是否有另一种解决方案来检查此列是否包含某些字符串。使用oracle 11.2.0.4.0

3 个答案:

答案 0 :(得分:12)

您可以使用DBMS_LOB.INSTR( clob_value, pattern [, offset [, occurrence]] )

SELECT *
FROM   your_table
WHERE  DBMS_LOB.INSTR( clob_column, 'string to match' ) > 0;

SELECT *
FROM   your_table
WHERE  clob_column LIKE '%string to match%';

答案 1 :(得分:2)

根据MT0的答案。我测试哪种方法有效。

CLOB列的长度为 155018 ,并搜索 32长度字符串。

这是我的考试。

class SomeException(Exception):
    pass

try:
    print("In try block.")
    raise SomeException("message")
except SomeException as exc:
    print(exc.args[0]) #Prints "message"

enter image description here

INSTR 的平均时间为0.797。

喜欢的平均时间为0.823。

答案 2 :(得分:0)

如果要查看该列的值,并且Oracle为ORA-22835返回WHERE clob_column LIKE '%string to match%'(缓冲区太小),则应该应用一些解决方法。

DBMS_LOB.instrDBMS_LOB.substr的组合可能是一种解决方案。参见例如this Stackoverflow tip。因此,就您而言:

SELECT DBMS_LOB.substr(your_clob_column, DBMS_LOB.instr(your_clob_column,'string to match'), 1) AS Text
FROM your_table
WHERE DBMS_LOB.instr(your_clob_column, 'string to match') > 0