通过DBA_SOURCE定位SQL语句属于哪个存储过程 推荐
2010-11-15 16:22
465 查看
通过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)); 分析: 该语句在PKG_SAMPLE_CON_STATUS的35行 确认:如下存储过程35行确实有该行内容 CREATE OR REPLACE Package Body Pkg_Sample_Con_Status Is -- Private type declarations -- Private constant declarations -- Private variable declarations -- Function and procedure implementations Function Func_Is_Over_Clearance_State(v_Con_Id In Number, v_Clearance_State In Varchar2) Return Number Is v_Num Number; Begin Select Count(*) Into v_Num From Sample_Ent_Status_Note Where Deleted_Flag = 0 And Ent_Id In (Select Ent_Id From Sample_Ent_Con Where Con_Id = v_Con_Id) And Clearance_State < v_Clearance_State; If v_Num > 0 Then Return 0; Else Return 1; End If; End Func_Is_Over_Clearance_State; -- 判断 Function Func_Is_All_Con_In(v_Con_Id In Number) Return Number Is v_Num Number; Begin Select Count(*) Into v_Num 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 = v_Con_Id)); If v_Num > 0 Then Return 0; Else Return 1; End If; End Func_Is_All_Con_In;
相关文章推荐
- 如何使用dba_source快速定位sql语句
- SQL语句和存储过程属于哪个层
- 答:SQLServer DBA 三十问之六:Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
- 通过MySQL慢查询日志定位执行效率低的SQL语句
- 通过dba_hist_*定位问题sql
- SQL Server 如何通过SQL语句定位SSRS中的具体报表
- 通过USER_SOURCE、DBA_SOURCE、ALL_SOURCE查询Oralce数据库对象DDL语句
- MYSQL通过SQL语句提取表中URL数据的域名
- 通过查询分析器对比SQL语句的执行效率
- java 反射 Bean 通过sql语句
- DBA常用SQL语句
- SQL实现分页(通过PHP)以及增删改查核心语句
- vba通过ado连接oracle执行SQL语句,报非法字符错误。(超级恶心)
- 通过分析SQL语句的执行计划优化SQL(七)(2)
- 通过xml处理sql语句时对小于号与大于号的处理转换
- 如何通过SQL语句获取分组中的某几条记录
- mysql数据库sql语句通过DATE_FORMAT格式化日期
- 通过分析SQL语句的执行计划优化SQL
- 通过SQL语句或数据库,生成数据库模型PDM方法详解
- 通过show profile分析sql语句