如果您想查看列的值,而Oracle返回WHERE clob_column LIKE '%string to match%'(缓冲区太小),那么您应该应用一些变通方法。 DBMS_LOB.instr和DBMS_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
4条答案
按热度按时间qnzebej01#
您可以使用
DBMS_LOB.INSTR( clob_value, pattern [, offset [, occurrence]] )
:或
2fjabf4q2#
根据MT0的回答,我测试哪种方法是有效的。
CLOB列长度为155018,请搜索32长度字符串。
这是我的测试。
INSTR的平均时间为0.797。
LIKE的平均时间为0.823。
fnx2tebb3#
如果您想查看列的值,而Oracle返回
WHERE clob_column LIKE '%string to match%'
(缓冲区太小),那么您应该应用一些变通方法。DBMS_LOB.instr
和DBMS_LOB.substr
的组合可能是一个解决方案。例如,请参见this Stackoverflow tip。因此,在您的情况下:ncecgwcz4#
使用
DBMS_LOB.COMPARE()
返回值整数:如果比较成功则返回0,否则返回非零值。