是否可以使用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