SQL 在 Oracle 中搜索对象,包括存储过程
Posted
技术标签:
【中文标题】SQL 在 Oracle 中搜索对象,包括存储过程【英文标题】:SQL to search objects, including stored procedures, in Oracle 【发布时间】:2010-10-25 14:38:18 【问题描述】:我需要编写一些 sql 来查询 Oracle 数据库中的所有对象。不幸的是,我们被允许使用的工具没有内置此功能。 基本上,我需要搜索所有表、过程、触发器、视图,以及所有内容。
我知道如何搜索对象名称。但我需要搜索对象的内容。 即 SELECT * FROM DBA_OBJECTS WHERE object_name = '%search string%';
谢谢, 格伦
【问题讨论】:
好资源:techonthenet.com/oracle/sys_tables 【参考方案1】:我不确定我是否完全理解这个问题,但如果您想在数据库中搜索特定搜索字符串的对象,请尝试:
SELECT owner, name, type, line, text
FROM dba_source
WHERE instr(UPPER(text), UPPER(:srch_str)) > 0;
如果您需要更多信息,可以从那里查找对象/行号。
对于您可以使用的视图:
SELECT *
FROM dba_views
WHERE instr(UPPER(text_vc), UPPER(:srch_str)) > 0
【讨论】:
使用SELECT owner, name, type FROM dba_source WHERE instr(UPPER(name), UPPER(':srch_strg')) > 0;
仅搜索名称.. 可能对某些人更实用
这种方法很棒,因为您可以过滤对象的“类型”。 (WHERE type = 'PROCEDURE') 如果需要.. 如果您知道它是一个过程或可能是一个函数(例如...),则可以避免遍历所有其他类型(例如...)
@IEnjoyEatingVegetables 我已经编辑了答案以包含可用于搜索视图的数据字典视图【参考方案2】:
我不确定我是否理解您,但要查询您的触发器、过程、包和函数的源代码,您可以尝试使用“user_source”表。
select * from user_source
【讨论】:
【参考方案3】:我会使用 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 中工作。
【讨论】:
[PLUS ONE] 这简直拯救了我的一天! [PLUS ONE] 因为您不需要管理员权限【参考方案4】:我在尝试查找使用某个表的所有过程时遇到了这个问题
Oracle SQL Developer 提供此功能,如本文所述:https://www.thatjeffsmith.com/archive/2012/09/search-and-browse-database-objects-with-oracle-sql-developer/
从视图菜单中,选择查找数据库对象。选择一个数据库连接。输入表的名称。在对象类型中,只保留函数、过程和包。在代码部分,检查所有源代码行。
【讨论】:
【参考方案5】:ALL_SOURCE 描述当前用户可访问的存储对象的文本源。
这是解决方案之一
select * from ALL_SOURCE where text like '%some string%';
【讨论】:
【参考方案6】:在 Oracle 11g 中,如果您想在整个数据库或过程中搜索任何文本,可以使用下面提到的查询:
select * from user_source WHERE UPPER(text) LIKE '%YOUR SAGE%'
【讨论】:
以上是关于SQL 在 Oracle 中搜索对象,包括存储过程的主要内容,如果未能解决你的问题,请参考以下文章