分别执行下面两条语句:
select o.* from user_objects o where o.object_type='PROCEDURE';
select * from user_procedures ;
会发现两条sql执行后的结果不一样,记录条数也不一样,为什么呢?
原因是user_procedures视图中只包含编译通过的存储过程和函数,而user_objects o where o.object_type='PROCEDURE'包含所有的存储过程(包含编译不通过的)。
select *
from user_procedures p
where not exists (select 1
from user_objects uo
where uo.OBJECT_TYPE = 'PROCEDURE'
and uo.OBJECT_NAME = p.object_name)
select *
from user_objects p
where p.OBJECT_TYPE = 'PROCEDURE' and not exists (select 1
from user_procedures uo
where uo.OBJECT_NAME = p.object_name)