首页 文章

用于在Oracle中搜索对象(包括存储过程)的SQL

提问于
浏览
23

我需要编写一些sql来允许我查询Oracle数据库中的所有对象 . 不幸的是,我们被允许使用的工具没有内置 . 基本上,我需要搜索所有表,过程,触发器,视图,一切 .

我知道如何搜索对象名称 . 但我需要搜索对象的内容 . 即SELECT * FROM DBA_OBJECTS WHERE object_name ='%search string%';

谢谢,格伦

5 回答

  • 29

    我不确定我是否理解你,但查询你可以尝试使用“user_source”表的触发器,程序,包和函数的源代码 .

    select * from user_source
    
  • 1

    我不确定我是否完全理解这个问题,但是如果你想在数据库中搜索特定搜索字符串的对象,请尝试:

    SELECT owner, name, type, line, text 
    FROM dba_source
    WHERE instr(UPPER(text), UPPER(:srch_str)) > 0;
    

    如果您需要更多信息,可以从那里查找对象/行号 .

  • 9

    我会使用DBA_SOURCE(如果您有权访问它),因为如果您需要的对象不属于您登录的模式,您将无法看到它 .

    如果您需要了解包中的函数和Procs,请尝试以下方法:

    select * from all_source
     where type = 'PACKAGE'
       and (upper(text) like '%FUNCTION%' or upper(text) like '%PROCEDURE%')
       and owner != 'SYS';
    

    最后一行阻止返回所有sys内容(DBMS_等) . 如果您只想要自己的架构内容,这将在user_source中工作 .

  • 1

    ALL_SOURCE描述当前用户可访问的存储对象的文本源 .

    这是解决方案之一

    select * from ALL_SOURCE where text like '%some string%';
    
  • 17

    我试图找到使用某个表的所有程序时达到了这个问题

    Oracle SQL Developer提供此功能,如本文所述:https://www.thatjeffsmith.com/archive/2012/09/search-and-browse-database-objects-with-oracle-sql-developer/

    从View菜单中,选择Find DB Object . 选择数据库连接 . 输入表格的名称 . 在对象类型中,仅保留函数,过程和包 . 在“代码”部分,选中“所有源代码行”

    enter image description here

相关问题