目前我有这个代码的查询,to_char(CLOB_COLUM) like %s但以下不适用于非常大的clob.是否有另一种解决方案来检查此列是否包含某些字符串.使用oracle 11.2.0.4.0
MT0*_*MT0 13
你可以使用DBMS_LOB.INSTR( clob_value, pattern [, offset [, occurrence]] ):
SELECT *
FROM your_table
WHERE DBMS_LOB.INSTR( clob_column, 'string to match' ) > 0;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT *
FROM your_table
WHERE clob_column LIKE '%string to match%';
Run Code Online (Sandbox Code Playgroud)
根据MT0的回答。我测试一下哪种方式有效。
CLOB列长度为155018,搜索32 长度字符串。
这是我的测试。
| INSTR | LIKE |
|:-------|------:|
| 0.857 |0.539 |
| 0.127 |0.179 |
| 1.635 |0.534 |
| 0.511 |0.818 |
| 0.429 |1.038 |
| 1.586 |0.772 |
| 0.461 |0.172 |
| 0.126 |1.379 |
| 1.068 |1.088 |
| 1.637 |1.169 |
| 0.5 |0.443 |
| 0.674 |0.432 |
| 1.201 |0.135 |
| 0.419 |2.057 |
| 0.731 |0.462 |
| 0.787 |1.956 |
Run Code Online (Sandbox Code Playgroud)
INSTR的平均时间 为 0.797。
LIKE的平均时间 为 0.823。