Ini menjadi lebih mudah di 12c, di mana Anda dapat menggunakan
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Ini mengasumsikan string teks yang Anda cari ada di 4000 karakter pertama. Anda mungkin juga memiliki laporan yang menyertakan tampilan apa pun di mana text_length
adalah> 4000 bersama dengan peringatan.
Di versi sebelumnya (atau untuk menghindari pembatasan 4000 karakter), Anda dapat mencoba loop PL/SQL seperti ini:
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 secara implisit mengonversi SQL LONG
nilai ke string PL/SQL 32K.
(Dalam pengujian saya di 12.2.0.1.0, ini gagal dengan ORA-06502: PL/SQL: numeric or value error
di select
pernyataan ketika kursor saya menyertakan SYS.DBA_SCHEDULER_RUNNING_JOBS
atau SYS."_user_stat"
, meskipun tampilan lain dengan teks yang lebih panjang berhasil ditangani, dan saya tidak yakin mengapa. Mungkin ada beberapa masalah dengan ini yang tidak saya lihat.)