Điều này trở nên dễ dàng hơn trong 12c, nơi bạn có thể sử dụng
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Điều này giả sử chuỗi văn bản bạn đang tìm kiếm nằm trong 4000 ký tự đầu tiên. Bạn cũng có thể có báo cáo bao gồm bất kỳ chế độ xem nào trong đó text_length
là> 4000 cùng với một cảnh báo.
Trong các phiên bản trước (hoặc để tránh giới hạn 4000 ký tự), bạn có thể thử một vòng lặp PL / SQL như sau:
begin
dbms_output.put_line('Owner View name');
dbms_output.put_line('------------------------------ -------------------------------');
for r in (
select v.owner, v.view_name, v.text
from all_views v
where v.owner <> 'SYS'
)
loop
if lower(r.text) like '%abc%' then
dbms_output.put_line(rpad(r.owner,31) || r.view_name);
end if;
end loop;
end;
PL / SQL chuyển đổi ngầm định SQL LONG
giá trị thành một chuỗi PL / SQL 32K.
(Trong các thử nghiệm của tôi trong 12.2.0.1.0, điều này không thành công với ORA-06502: PL/SQL: numeric or value error
tại select
câu lệnh khi con trỏ của tôi bao gồm SYS.DBA_SCHEDULER_RUNNING_JOBS
hoặc SYS."_user_stat"
, mặc dù các chế độ xem khác có văn bản dài hơn đã được xử lý thành công và tôi không chắc tại sao. Có thể có một số vấn đề với điều này mà tôi không thấy.)