检查 clob 是否包含字符串 oracle
check if clob contains string oracle
目前我有关于此代码的查询 to_char(CLOB_COLUM) like %s
但以下代码不适用于非常大的 clob。是否有另一种解决方案来检查此列是否包含某些字符串。使用甲骨文 11.2.0.4.0
您可以使用 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%';
根据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 |
INSTR的平均时间是0.797。
LIKE的平均时间是0.823.
如果您想查看列的值和 WHERE clob_column LIKE '%string to match%'
的 Oracle returns ORA-22835
(缓冲区太小),那么您应该应用一些解决方法。
DBMS_LOB.instr
和 DBMS_LOB.substr
的组合可能是一个解决方案。参见例如this Whosebug 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
目前我有关于此代码的查询 to_char(CLOB_COLUM) like %s
但以下代码不适用于非常大的 clob。是否有另一种解决方案来检查此列是否包含某些字符串。使用甲骨文 11.2.0.4.0
您可以使用 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%';
根据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 |
INSTR的平均时间是0.797。
LIKE的平均时间是0.823.
如果您想查看列的值和 WHERE clob_column LIKE '%string to match%'
的 Oracle returns ORA-22835
(缓冲区太小),那么您应该应用一些解决方法。
DBMS_LOB.instr
和 DBMS_LOB.substr
的组合可能是一个解决方案。参见例如this Whosebug 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