查询以搜索表和/或列的所有包

时间:2011-01-31 16:00:00

标签: oracle

我是否可以运行查询来搜索所有包,以查看包中是否使用了特定的表和/或列?有太多的软件包可以打开每个软件包并查找我正在寻找的值。

4 个答案:

答案 0 :(得分:61)

你可以这样做:

select *
from user_source
where upper(text) like upper('%SOMETEXT%');

或者,SQL Developer有一个内置报告,可以在下面执行此操作:

View > Reports > Data Dictionary Reports > PLSQL > Search Source Code

USER_SOURCE的11G文档为here

答案 1 :(得分:8)

您可以使用观看*_DEPENDENCIES,例如:

SELECT owner, NAME
  FROM dba_dependencies
 WHERE referenced_owner = :table_owner
   AND referenced_name = :table_name
   AND TYPE IN ('PACKAGE', 'PACKAGE BODY')

答案 2 :(得分:0)

有时您要查找的列可能是您不感兴趣的许多其他内容的名称的一部分。

例如,我最近在寻找一个名为“BQR”的列,它也构成了许多其他列的一部分,例如“BQR_OWNER”,“PROP_BQR”等。

所以我想拥有单词处理器必须指示“仅限整个单词”的复选框。

不幸的是,LIKE没有这样的功能,但REGEXP_LIKE可以提供帮助。

SELECT *
  FROM user_source
 WHERE regexp_like(text, '(\s|\.|,|^)bqr(\s|,|$)');

这是查找此列的正则表达式,并将“BQR”作为名称的一部分排除在其他列之外:

(\s|\.|,|^)bqr(\s|,|$)

正则表达式匹配空格(\ s),或(|)句点(。),或(|)逗号(,)或(|)行首(^),后跟“bqr” “,然后是空格,逗号或行尾($)。

答案 3 :(得分:0)

顺便说一句,如果你需要添加其他字符,例如"("或")"因为该列可以用作" UPPER(bqr)",然后可以将这些选项添加到字符前后的列表中。

my_data=> \z users
                       Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)