Có thể tìm kiếm qua văn bản blob bằng câu lệnh sql không? Tôi có thể chọn * từ bảng $ nơi f1 như '% foo%' nếu f1 là varchar, khoảng f1 là blob? Bất kỳ phần truy cập cho điều này?Tìm kiếm văn bản oracle blob
Trả lời
Nếu bạn đang lưu trữ văn bản thuần túy, nó phải là một CLOB, không phải là BLOB, và sau đó bạn vẫn có thể truy vấn bằng cách sử dụng LIKE. Một BLOB chứa dữ liệu nhị phân mà Oracle không biết cấu trúc của, vì vậy nó không thể tìm kiếm theo cách này.
này làm việc cho CLOBs của bất kỳ chiều dài (ít nhất là trên Oracle 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
Lưu ý rằng chỉ có một 'z' trong đó 6.554.401 byte CLOB - ngay ở giữa của nó:
SQL> select instr(c, 'z') from t1;
INSTR(C,'Z')
------------
3276701
Nếu nó là một tài liệu Word hoặc PDF, nhìn vào Oracle Text.
Điều này khá khả thi và dễ thực hiện.
Đơn giản chỉ cần sử dụng dbms_lob.instr kết hợp với utl_raw.cast_to_raw
Vì vậy, trong trường hợp của bạn, nếu t1 là một BLOB sự chọn sẽ trông như thế:
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
;
++ Khi cơ sở dữ liệu không phải là của bạn, để nói lược đồ là sai là không hữu ích tất cả. Cảm ơn bạn rất nhiều vì đã hồi sinh và trả lời câu hỏi! – Decker
Rất chậm, nhưng nó hoạt động, Cảm ơn! –
điều này thực sự đã giúp tôi cảm ơn! –
- 1. Tìm kiếm MySQL và tìm kiếm toàn văn bản
- 2. MongoDB Tìm kiếm văn bản VÀ nhiều từ tìm kiếm
- 3. tìm kiếm văn bản boolean trong python
- 4. Tìm kiếm toàn văn bản với Rails
- 5. Văn bản tìm kiếm của Oracle với các ký tự không phải tiếng Anh
- 6. Văn bản lưu trữ trong BLOB?
- 7. Oracle BLOB vs VARCHAR
- 8. Tìm kiếm bản sao trong tệp văn bản cục bộ
- 9. blob vs văn bản trong diễn đàn
- 10. Google Datastore - Blob hoặc Văn bản
- 11. Tìm kiếm giá trị trong cột BLOB trong MySQL
- 12. Tìm kiếm trên Windows - tìm kiếm toàn văn bản trong C#
- 13. Làm nổi bật văn bản tìm kiếm sau khi tìm kiếm trong UITableView
- 14. Tìm kiếm toàn văn bản SQL Server Tìm kiếm FREETEXTTABLE nhiều cột
- 15. convert oracle blob thành xml type
- 16. Cassandra tìm kiếm đầy đủ văn bản như
- 17. Hiển thị số div dựa trên tìm kiếm văn bản
- 18. Hiển thị văn bản ẩn trong khi tìm kiếm
- 19. Chỉ mục tìm kiếm văn bản đầy đủ của SQLite
- 20. Công cụ tìm kiếm văn bản tệp đơn giản?
- 21. Tìm kiếm văn bản cao cấp 2 không hoạt động
- 22. Tìm kiếm Văn bản Nhanh Qua Nhật ký
- 23. iOS CGPDFScanner để tìm kiếm vị trí văn bản
- 24. Microsoft Access có Tìm kiếm Toàn văn bản không?
- 25. CheckedListBox - Tìm kiếm một mục theo văn bản
- 26. tìm kiếm văn bản đầy đủ cài đặt hoặc không
- 27. Tìm kiếm văn bản cho trường ForeignKey ở Django Admin
- 28. Indexing cột cho tìm kiếm văn bản đầy đủ
- 29. Sử dụng IN hoặc tìm kiếm văn bản
- 30. Dưa chuột - Tìm kiếm văn bản trong hàng trong bảng
@Olafur có một câu trả lời hữu ích tốt dưới đây: http://stackoverflow.com/a/16301995/510711 – flob
Điều này cũng sai. Nó chỉ hoạt động cho CLOBS có <32767 ký tự. Đó là khá nhỏ. instr và như thế sẽ phá vỡ sau đó bạn phải sử dụng dbms_lob.instr để tìm kiếm. –
@Olafur: sự chỉ trích của bạn là sai vì tôi đã cập nhật câu trả lời của mình để hiển thị. –