是否可以使用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. 在hsql中搜索blob中的文本
- 2. Azure在blob上搜索在搜索後檢索到blob本身
- 3. Oracle文本內容搜索?
- 4. Oracle文本搜索範圍
- 5. Oracle模糊文本搜索
- 6. Informix SQL文本Blob通配符搜索
- 7. Oracle全文搜索
- 8. 使用Azure搜索,Azure SQL和Azure Blob存儲添加全文本搜索
- 9. Oracle文本 - 索引BLOB字段(其中包含PDF數據)
- 10. 使用.Net和Devart的dotConnect for Oracle進行Oracle文本搜索
- 11. Java oracle搜索
- 12. 搜索在Oracle
- 13. 搜索文本
- 14. 搜索文本
- 15. 搜索blob存儲數據
- 16. Oracle - 搜索文本 - 檢索結果的代碼片段
- 17. 搜索分級文本
- 18. 搜索PDF文本文本
- 19. Azure搜索json blob索引速度
- 20. 帶有非英文字符的Oracle搜索文本
- 21. 文本搜索Mysql索引
- 22. jquery文本搜索
- 23. 文本搜索PDF
- 24. javascript:搜索文本
- 25. 搜索文本geonames
- 26. MongoDB - 搜索文本
- 27. Imacro搜索文本
- 28. jquery文本搜索
- 29. 如何檢索BLOB數據在Oracle APEX
- 30. Azure搜索不再在blob存儲中索引文檔
@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