SAP HANA 将代码覆盖会话的结果存储在 M_SQLSCRIPT_CODE_COVERAGE_RESULTS 监控视图中,并将代码覆盖会话期间使用的对象定义存储在 M_SQLSCRIPT_CODE_COVERAGE_OBJECT_DEFINITIONS 监控视图中。
要启动 SQLScript 代码覆盖范围:
ALTER SYSTEM START SQLSCRIPT CODE COVERAGE
[ FOR DEBUG TOKEN ]
[ FOR USER ]
[ FOR APPLICATION USER ]
[ FOR SESSION ]
要停止 SQLScript 代码覆盖范围:
ALTER SYSTEM STOP SQLSCRIPT CODE COVERAGE随时从监控视图中进行选择,并从任何列开始代码覆盖范围后感兴趣。但是,代码覆盖运行的完整内容仅在第二个会话中触发的查询(已涵盖)完成后可见(如下面的第二个示例中所述)。
每次停止 SQLScript 代码覆盖会话并启动新会话时,这些视图中的内容都会被覆盖。由于数据是临时的,因此在执行 ALTER SYSTEM STOP SQLSCRIPT CODE COVERAGE 之前,从这些视图中复制或导出内容以保留 SQLScript 代码覆盖会话记录的数据。
要覆盖代码,必须至少有两个连接。在第一个会话中执行运行代码覆盖范围的代码,并在第二个会话中为特定连接标识启动代码覆盖范围以记录覆盖范围。
注意您必须具有 EXECUTE、DEBUG 和 ATTACH_DEBUGGER 权限才能执行代码覆盖。
SAP HANA 需要两个会话来执行代码覆盖。以下示例使用会话 A 执行运行代码覆盖的代码,会话 B 启动特定连接 ID 的代码覆盖以记录覆盖范围。
CREATE PROCEDURE limitedLoop() ASBEGINDECLARE i BIGINT := 0;LOOPi := i + 1;IF :i > 27 THENBREAK;END IF;END LOOP;END;CREATE PROCEDURE dummy_proc() ASBEGINSELECT * FROM DUMMY;CALL limitedLoop();END;
SELECT SESSION_CONTEXT('CONN_ID') FROM DUMMY;
ALTER SYSTEM START SQLSCRIPT CODE COVERAGE FOR SESSION '203247';
SELECT * FROM M_SQLSCRIPT_CODE_COVERAGE_RESULTS;SELECT * FROM M_SQLSCRIPT_CODE_COVERAGE_OBJECT_DEFINITIONS; 如果需要,存储监控视图的内容以供将来参考(可以是常规临时表或本地临时表): CREATE LOCAL TEMPORARY TABLE "#SomeTableName" AS (SELECT * FROM M_SQLSCRIPT_CODE_COVERAGE_RESULTS) WITH DATA;
ALTER SYSTEM STOP SQLSCRIPT CODE COVERAGE;