是否可以使用sql语句搜索blob文本? 我可以从$表中选择*,其中f1类似于'%foo%',如果f1是varchar,那么f1如何是blob?任何计数器部分?oracle blob文本搜索
回答
如果你正在存储纯文本,它应该是一个CLOB,而不是一个BLOB,然后你仍然可以使用LIKE进行查询。 BLOB包含Oracle不知道其结构的二进制数据,因此无法以此方式进行搜索。
此工程的CLOB的任何长度(至少在甲骨文12C):
SQL> create table t1 (c clob);
Table created.
SQL> declare
2 x clob;
3 begin
4 for i in 1..100 loop
5 x := x || rpad('x', 32767, 'x');
6 end loop;
7 x := x || 'z';
8 for i in 1..100 loop
9 x := x || rpad('x', 32767, 'x');
10 end loop;
11 insert into t1 values (x);
12 end;
13/
PL/SQL procedure successfully completed.
SQL> select dbms_Lob.getlength(c) from t1 where c like '%z%';
DBMS_LOB.GETLENGTH(C)
---------------------
6553401
需要注意的是,只有一个在6554401字节CLOB“Z” - 就在它的中间:
SQL> select instr(c, 'z') from t1;
INSTR(C,'Z')
------------
3276701
如果是Word或PDF文档,请查看Oracle Text。
这是非常可能和容易做到的。
结合使用时只需用dbms_lob.instr utl_raw.cast_to_raw
所以你的情况,如果T1是BLOB选择会是什么样子:
select *
from table1
where dbms_lob.instr (t1, -- the blob
utl_raw.cast_to_raw ('foo'), -- the search string cast to raw
1, -- where to start. i.e. offset
1 -- Which occurrance i.e. 1=first
) > 0 -- location of occurrence. Here I don't care. Just find any
;
++当数据库不是你的时候,说模式是错误的并不是全部有用。非常感谢你为复活和回答这个问题! – Decker 2014-03-28 20:42:00
这很慢,但它的工作原理,谢谢! – 2014-07-30 08:20:45
这真的帮助我谢谢! – 2017-03-08 17:42:17
- 1. Oracle文本搜索范围
- 2. Oracle文本内容搜索?
- 3. Informix SQL文本Blob通配符搜索
- 4. Oracle全文搜索
- 5. 使用Azure搜索,Azure SQL和Azure Blob存储添加全文本搜索
- 6. Oracle文本 - 索引BLOB字段(其中包含PDF数据)
- 7. Java oracle搜索
- 8. 搜索文本
- 9. 搜索PDF文本文本
- 10. Azure搜索json blob索引速度
- 11. 文本搜索Mysql索引
- 12. jquery文本搜索
- 13. 文本搜索PDF
- 14. 搜索文本geonames
- 15. jquery文本搜索
- 16. MongoDB - 搜索文本
- 17. Imacro搜索文本
- 18. 如何检索BLOB数据在Oracle APEX
- 19. Azure搜索不再在blob存储中索引文档
- 20. Oracle是否支持全文搜索?
- 21. SQL Server和Oracle中的全文搜索
- 22. 搜索文本文件
- 23. 搜索文本文件
- 24. Java文本文件搜索
- 25. 大文本文件搜索
- 26. Python文本文件搜索
- 27. Oracle BLOB vs VARCHAR
- 28. 在Oracle存储过程中搜索文本
- 29. Oracle 10G搜索视图,作业,文本字符串的过程
- 30. 解析Oracle文本搜索/查询中的保留字符?
@Olafur下方有个好有用的答案: http://stackoverflow.com/a/16301995/510711 – flob 2015-03-02 15:34:34
这也是错误的。它只适用于<32767个字符的CLOBS。这是相当小的。 instr之类的会在这之后中断,你必须使用dbms_lob.instr来进行搜索。 – 2015-03-11 11:29:12
@Olafur:你的批评是错误的,因为我已经更新了我的回答。 – 2015-03-11 12:54:24