Jef*_*emp 12
听起来你想要的是能够列出可能具有状态的所有包.
您正在寻找的只是具有任何全局变量或常量的包.对于单个包装,通过检查非常简单.但是,要查看模式中的所有包,您可以使用PL/Scope:
首先,以架构所有者身份登录,在会话中启用PL/Scope:
alter session set plscope_settings='IDENTIFIERS:ALL';
Run Code Online (Sandbox Code Playgroud)
然后,重新编译所有包体.
然后,运行此查询以查找在包级别声明的所有变量和常量:
select object_name AS package,
type,
name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type in ('VARIABLE','CONSTANT')
and usage_context_id in (
select usage_id
from user_identifiers
where type = 'PACKAGE'
);
Run Code Online (Sandbox Code Playgroud)
我建议最终的包列表将是你的目标.
如果您使用11gR2,常量不再导致此问题,因此您将使用此查询:
select object_name AS package,
type,
name AS variable_name
from user_identifiers
where object_type IN ('PACKAGE','PACKAGE BODY')
and usage = 'DECLARATION'
and type = 'VARIABLE'
and usage_context_id in (
select usage_id
from user_identifiers
where type = 'PACKAGE'
);
Run Code Online (Sandbox Code Playgroud)