我正在使用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
在每个分析器运行之前,我都会清除 plsql_profiler_data、plsql_profiler_units、plsql_profiler_runs 表,这样我就不需要每次都知道运行 ID。
这将为我提供有关分析期间覆盖的代码百分比的打包明智信息。现在我想看看这是否可以构建为一个正常的覆盖率报告,我可以知道哪一行代码被覆盖,哪一行没有(比如选择 lineOfCode,从...中发现),这样我就可以用 html 构建一个报告格式化以指示一行是否被覆盖。
我对保存函数和过程的位置等方面的 Oracle 表结构不太精通。(从博客中获取上述查询并稍作修改以删除运行 ID)
这可能吗?
如果是这样,我该如何实现?