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

简介:

 
 
  1. 通过DBA_SOURCE定位SQL语句属于哪个存储过程 
  2.   
  3. 最近集中进行了一系列SQL优化,主要通过ADDM和AWR对捕捉COST或物理读、逻辑读很高的语句,问题的主要原因是全表扫描。但提交开发后开发反馈找不到SQL语句,因为属于存储过程。其实通过EDITPLUS全目录检索肯定能够找到该语句的位置,但为了便于日后定位,笔者还是通过ORACLE的dba_source视图进行了步骤。 
  4.  
  5. 什么是dba_source字典视图: 
  6. 存储所有函数、过程、程序包和Java源的完整的文本,对于你了解一个数据库对象的源代码很有用。存储过程在该视图中是以行为单位进行存储的。 
  7.   
  8. SAMPLE: 
  9. 问题sql语句 
  10. Select Count(*) 
  11. From Sample_Con_Sta_No Cs 
  12. Where Cs.Deleted_Flag = 0 And (Cs.In_Out_Group_Status != '1' And Cs.In_Out_Group_Status != '2'And 
  13.                             Cs.Con_Id In 
  14.                             (Select Con_Id 
  15.                             From Sample_Ent_Con Ec 
  16.                             Where Ec.Ent_Id In (Select Ent_Id From Sample_Ent_Con Ecc Where Ecc.Con_Id = :B1)) 
  17.   
  18. 定位方法: 
  19. 截取“Select Ent_Id From Sample_Ent_Con Ecc Where Ecc.Con_Id”去视图查询(注意dba_source视图中存储的是行为单位拆分的存储过程等对象,关键词太长肯定找不到) 
  20.   
  21. 查询语句: 
  22. Select * From dba_source Where text Like '%Select Ent_Id From Sample_Ent_Con Ecc%' 
  23.   
  24. 查询结果: 
  25. OWNER 
  26. NAME 
  27. TYPE 
  28. LINE 
  29. TEXT 
  30. SAMPLE 
  31. PKG_SAMPLE_CON_STATUS 
  32. PACKAGE BODY 
  33. 35 
  34. (Select Ent_Id From Sample_Ent_Con Ecc 
  35.  Where Ecc.Con_Id = v_Con_Id)); 
  36.   
  37. 分析: 
  38. 该语句在PKG_SAMPLE_CON_STATUS的35行 
  39.   
  40. 确认:如下存储过程35行确实有该行内容 
  41. CREATE OR REPLACE Package Body Pkg_Sample_Con_Status Is 
  42.      -- Private type declarations 
  43.      -- Private constant declarations 
  44.      -- Private variable declarations 
  45.      -- Function and procedure implementations 
  46.  
  47.      Function Func_Is_Over_Clearance_State(v_Con_Id In Number, v_Clearance_State In Varchar2) Return Number Is 
  48.          v_Num Number; 
  49.      Begin 
  50.          Select Count(*) 
  51.          Into v_Num 
  52.          From Sample_Ent_Status_Note 
  53.          Where Deleted_Flag = 0 And 
  54.                        Ent_Id In (Select Ent_Id From Sample_Ent_Con Where Con_Id = v_Con_Id) And 
  55.                        Clearance_State < v_Clearance_State; 
  56.          If v_Num > 0 Then 
  57.               Return 0; 
  58.          Else 
  59.               Return 1; 
  60.          End If; 
  61.      End Func_Is_Over_Clearance_State; 
  62.  
  63.      -- 判断 
  64.      Function Func_Is_All_Con_In(v_Con_Id In Number) Return Number Is 
  65.          v_Num Number; 
  66.      Begin 
  67.          Select Count(*) 
  68.          Into v_Num 
  69.          From Sample_Con_Sta_No Cs 
  70.          Where Cs.Deleted_Flag = 0 And (Cs.In_Out_Group_Status != '1' And Cs.In_Out_Group_Status != '2'And 
  71.                        Cs.Con_Id In 
  72.                        (Select Con_Id 
  73.                        From Sample_Ent_Con Ec 
  74.                        Where Ec.Ent_Id In 
  75.                                       (Select Ent_Id From Sample_Ent_Con Ecc Where Ecc.Con_Id = v_Con_Id)); 
  76.          If v_Num > 0 Then 
  77.               Return 0; 
  78.          Else 
  79.               Return 1; 
  80.          End If; 
  81.      End Func_Is_All_Con_In; 
  82.   
  83.   

 



本文转自zylhsy 51CTO博客,原文链接:http://blog.51cto.com/yunlongzheng/423689,如需转载请自行联系原作者

相关文章
|
7月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
7月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
551 11
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
300 1
|
11月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
3359 11
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
478 1
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
249 3
|
存储 SQL 数据库
Sql Server 存储过程怎么找 存储过程内容
Sql Server 存储过程怎么找 存储过程内容
681 1
|
存储 SQL 数据库
SQL Server 临时存储过程及示例
SQL Server 临时存储过程及示例
187 3
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
192 1
|
存储 SQL 安全