通过DBA_SOURCE定位SQL语句属于哪个存储过程

通过DBA_SOURCE定位SQL语句属于哪个存储过程

最近集中进行了一系列SQL优化,主要通过ADDM和AWR对捕捉COST或物理读、逻辑读很高的语句,问题的主要原因是全表扫描。但提交开发后开发反馈找不到SQL语句,因为属于存储过程。其实通过EDITPLUS全目录检索肯定能够找到该语句的位置,但为了便于日后定位,笔者还是通过ORACLE的dba_source视图进行了步骤。

什么是dba_source字典视图:

存储所有函数、过程、程序包和Java源的完整的文本,对于你了解一个数据库对象的源代码很有用。存储过程在该视图中是以行为单位进行存储的。

SAMPLE:

问题sql语句

Select Count(*)    
From Sample_Con_Sta_No Cs    
Where Cs.Deleted_Flag = 0 And (Cs.In_Out_Group_Status != '1' And Cs.In_Out_Group_Status != '2') And
                            Cs.Con_Id In
                            (Select Con_Id    
                            From Sample_Ent_Con Ec    
                            Where Ec.Ent_Id In (Select Ent_Id From Sample_Ent_Con Ecc Where Ecc.Con_Id = :B1))

定位方法:

截取“Select Ent_Id From Sample_Ent_Con Ecc Where Ecc.Con_Id”去视图查询(注意dba_source视图中存储的是行为单位拆分的存储过程等对象,关键词太长肯定找不到)

查询语句:

Select * From dba_source Where text Like '%Select Ent_Id From Sample_Ent_Con Ecc%'

查询结果:

OWNER

NAME

TYPE

LINE

TEXT

SAMPLE

PKG_SAMPLE_CON_STATUS

PACKAGE BODY

35

(Select Ent_Id From Sample_Ent_Con Ecc

Where Ecc.Con_Id = v_Con_Id));




转载请注明:http://www.xcqg58.com/bcxx/bcxx/39.html