【发布时间】:2019-06-18 21:01:27
【问题描述】:
作为我项目的一部分,我运行了一个 PL/SQL 块来处理来自 12 个不同表的超过 13,00,000 条记录。
要知道执行流程我已经包含了SET SERVEROUTPUT ON 命令。
我的要求是知道块仍在运行时的执行流程,SET SERVEROUTPUT ON 只显示 PL/SQL 块执行后的流程。
SET SERVEROUTPUT ON ;
PL/SQL Block;
【问题讨论】:
作为我项目的一部分,我运行了一个 PL/SQL 块来处理来自 12 个不同表的超过 13,00,000 条记录。
要知道执行流程我已经包含了SET SERVEROUTPUT ON 命令。
我的要求是知道块仍在运行时的执行流程,SET SERVEROUTPUT ON 只显示 PL/SQL 块执行后的流程。
SET SERVEROUTPUT ON ;
PL/SQL Block;
【问题讨论】:
您也可以使用包DBMS_APPLICATION_INFO,而不是使用专用的日志记录表和AUTONOMOUS_TRANSACTION。
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE('Starting at '||TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'), 'Starting procedure');
... some PL/SQL code
-- If you like you can set intermediate updates at any time:
DBMS_APPLICATION_INFO.SET_ACTION('Still running...');
... some more PL/SQL code
... at the end you may reset application info
DBMS_APPLICATION_INFO.SET_MODULE(NULL, NULL);
END;
程序运行时可以通过
查询信息SELECT SID, SERIAL#, USERNAME, OSUSER, MODULE, ACTION
from V$SESSION
where USERNAME = ...;
【讨论】: