使用DBMS Profiler构建PL/SQL覆盖率报告

raj*_*esh 10 oracle profiler plsql code-coverage

我使用DBMS_PROFILER进行PL/SQL包的基本概要分析.我也使用它来使用以下查询获取代码覆盖率统计信息:

SELECT EXEC.unit_name unitname,ROUND (EXEC.cnt/total.cnt * 100, 1) Code_coverage FROM 
    (SELECT u.unit_name, COUNT(1) cnt FROM plsql_profiler_data d, plsql_profiler_units u WHERE u.unit_number = d.unit_number GROUP BY u.unit_name) total, 
    (SELECT u.unit_name, COUNT(1) cnt FROM plsql_profiler_data d, plsql_profiler_units u WHERE u.unit_number = d.unit_number AND d.total_occur > 0 GROUP BY u.unit_name) EXEC 
    WHERE EXEC.unit_name = total.unit_name
Run Code Online (Sandbox Code Playgroud)

我在每个分析器运行之前清除plsql_profiler_data,plsql_profiler_units,plsql_profiler_runs表,这样我每次都不需要知道运行ID.

这将为我提供有关分析期间所涵盖的代码百分比的Package明智信息.现在我试着看看这是否可以构建为一个正常的覆盖率报告,我可以知道哪一行代码被覆盖,哪一行不是(比如选择lineOfCode,来自...),这样我就可以用html构建一个报告格式化以指示是否覆盖了一条线.

我对Oracle函数和程序保存等方面的表结构并不太精通.(从博客上获得上述查询并略微修改以删除运行ID)

这可能吗?

如果是这样我怎么能实现这个目标?

Gui*_*ens 0

实际上有一些 PL/SQL 工具可以进行代码覆盖。请参阅此问题的答案以获取更多信息。

也就是说,您可以在下表中找到有关用户创建的数据结构和代码的信息:

  • user_sourceTEXT:在这里您可以在以函数、过程、包等为代表的字段中找到源代码。
  • User_tables
  • user_indexes
  • user_types:如果你使用某种面向对象的代码。
  • 您可能需要的其他以user_该开头的表。

基本上,您需要检查查询结果user_source并从其他表中获取额外信息。