如何在BLOB字段进行文本搜索
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在BLOB字段进行文本搜索相关的知识,希望对你有一定的参考价值。
我们已经创建了一个BLOB类型的列来存储6000到7000个ASCII字符的有效载荷.我使用下面的代码插入有效载荷。
PreparedStatement stmt=conn.prepareStatement(insertQuery);
String record="My ASCII Payload";
stmt.setBytes(1, record.getBytes());
stmt.execute();
当我运行下面的查询时,我可以在输出中看到字符的长度,我想在这个BLOB列中执行文本搜索,我尝试了以下选项。
select dbms_lob.getLength(MY_PAYLOAD)
from RAW_DATA;
6085
我想在这个BLOB列中执行文本搜索,我尝试了以下选项,但没有任何效果。在BLOB列中执行文本搜索的正确方法是什么?
SELECT * FROM RAW_DATA t
WHERE dbms_lob.instr(t.MY_PAYLOAD,utl_raw.cast_to_raw(‘1234’))>0
select *
from RAW_DATA
where dbms_lob.instr (MY_PAYLOAD, -- the blob
utl_raw.cast_to_raw ('1234'),
1, -- where to start. i.e. offset
1 -- Which occurrance i.e. 1=first
) > 0
答案
你可以在 blobs 上创建文本索引,只要它们包含文本(自然)。
SQL> create table t ( x int, b blob);
Table created.
SQL>
SQL> insert into t values ( 1, utl_raw.cast_to_Raw('Hello there'));
1 row created.
SQL> insert into t values ( 2, utl_raw.cast_to_Raw('Goodbye tomorrow'));
1 row created.
SQL>
SQL> create index t_ix on t ( b )
2 indextype is ctxsys.context;
Index created.
SQL>
SQL> select x
2 from t where contains(b,'Hello') > 0;
X
----------
1
SQL>
SQL> select utl_raw.cast_to_varchar2(b)
2 from t
3 where contains(b,'Hello') > 0;
UTL_RAW.CAST_TO_VARCHAR2(B)
---------------------------------------------------------------------------------
Hello there
以上是关于如何在BLOB字段进行文本搜索的主要内容,如果未能解决你的问题,请参考以下文章
如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?
oracle中二进制字段(blob)的条件(如“like”)
如何在将 Blob 上传到 Blobstore 的 POST 请求中提交文本字段并在 Blob 的上传处理程序中检索它?