Oracle Blob 文本搜索
是否可以使用 sql 语句搜索 blob 文本? 我可以 select * from $table where f1 like '%foo%' 如果 f1 是 varchar,那么 f1 是一个 blob 怎么样?有什么对应的吗?
Is it possible to search through blob text using sql statement?
I can do select * from $table where f1 like '%foo%' if the f1 is varchar, how about f1 is a blob? Any counter part for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是完全可能且容易做到的。
只需将 dbms_lob.instr 与 utl_raw.cast_to_raw 结合使用
因此在您的情况下,如果 t1 是 BLOB,则选择将如下所示:
This is quite possible and easy to do.
Simply use dbms_lob.instr in conjunction with utl_raw.cast_to_raw
So in your case, if t1 is a BLOB the select would look like:
如果是 Word 或 PDF 文档,请查看 Oracle Text 。
If it is a Word or PDF document, look into Oracle Text.
如果您存储纯文本,它应该是 CLOB,而不是 BLOB,然后您仍然可以使用 LIKE 进行查询。 BLOB 包含 Oracle 不知道其结构的二进制数据,因此无法以这种方式搜索它。
这适用于任意长度的 CLOB(至少在 Oracle 12C 上):
请注意,6,554,401 字节的 CLOB 中只有一个“z” - 位于其中间:
If you are storing plain text it should be a CLOB, not a BLOB, and then you can still query using LIKE. A BLOB contains binary data that Oracle doesn't know the structure of, so it cannot search it in this way.
This works for CLOBs of any length (at least on Oracle 12C):
Note that there is only one 'z' in that 6,554,401 byte CLOB - right in the middle of it:
下面的代码是使用 UTL_RAW.CAST_TO_VARCHAR2 函数 然后我们使用 substr 函数 将文本从预期数据的开头剪切到结尾。但是,您可以使用指令函数, LENGTH 函数 ,如果您知道您正在寻找的数据
the below code is to display the details from blob as text using UTL_RAW.CAST_TO_VARCHAR2 function then we use substr function to cut the text from the start of expected data till end. however, you can use instr function, LENGTH function , if you know the location of the data you are looking for
从 TABLE_NAME 选择 *
和 dbms_lob.instr("BLOB_VARIABLE_NAME", utl_raw.cast_to_raw('search_text'), 1, 1) > 0
Select * From TABLE_NAME
and dbms_lob.instr("BLOB_VARIABLE_NAME", utl_raw.cast_to_raw('search_text'), 1, 1) > 0