Oracle 搜索视图文本

Del*_*hew 3 oracle oracle10g oracle11g

我有超过 1000 个视图,我想运行一个搜索,该搜索将显示abc在其 SQL 中包含字符串的视图的名称。如何搜索所有存储过程/SQL,包括我的视图?当我运行命令时:

SELECT *
FROM   all_source
WHERE  text LIKE '%abc%'
Run Code Online (Sandbox Code Playgroud)

它返回我abc存在字符串的源代码。但这不包括视图。

Wil*_*son 7

这在 12c 中变得更容易,您可以在其中使用

select *
from   all_views v
where  lower(v.text_vc) like '%abc%';
Run Code Online (Sandbox Code Playgroud)

这假设您要查找的文本字符串位于前 4000 个字符中。您还可能让报告包含text_length> 4000 的任何视图以及警告。

在早期版本中(或为了避免 4000 个字符的限制),您可以尝试这样的 PL/SQL 循环:

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;
Run Code Online (Sandbox Code Playgroud)

PL/SQL 将 SQLLONG值隐式转换为 32K PL/SQL 字符串。

(在我在 12.2.0.1.0 的测试中,当我的光标包含or时,这ORA-06502: PL/SQL: numeric or value errorselect语句中失败,即使其他具有较长文本的视图已成功处理,我不知道为什么。这可能有一些问题我没看见。)SYS.DBA_SCHEDULER_RUNNING_JOBSSYS."_user_stat"