gpt4 book ai didi

sql - 监控长时间运行的 PL/SQL block

转载 作者:行者123 更新时间:2023-12-04 13:20:46 25 4
gpt4 key购买 nike

我有一个相当耗时的 PL/SQL 块,它从分子结构中构建指纹。我想将输出打印到 SQL*Plus 控制台,以提供有关已处理的结构数量的反馈。我可以用 dbms_output.put_line 做到这一点

然而,每次被称为新行时都会写入。我想覆盖该行。

例如,目前我有以下内容。

Structure x of y processed
Structure x of y processed
Structure x of y processed
Structure x of y processed

最终我在处理数以千计的结构记录时填满了缓冲区。

有没有我可以使用的方法来覆盖最后一个输出行?

最佳答案

使用 DBMS_OUTPUT意味着 SQL*Plus 将在整个 PL/SQL 块完成之前不显示任何内容,然后将显示当前缓冲区中的所有数据。因此,这不是提供持续状态的适当方式。

另一方面,Oracle 确实提供了一个包 DBMS_APPLICATION_INFO这是专门为帮助您监控正在运行的代码而设计的。例如,你可以做类似的事情

CREATE PROCEDURE process_structures
AS
<<other variable declarations>>

rindex BINARY_INTEGER;
slno BINARY_INTEGER;
totalwork NUMBER := y; -- Total number of structures
worksofar NUMBER := 0; -- Number of structures processed
BEGIN
rindex := dbms_application_info.set_session_longops_nohint;

FOR i IN (<<select structures to process>>)
LOOP
worksofar := worksofar + 1;
dbms_application_info.set_session_longops(
rindex => rindex,
slno => slno,
op_name => 'Processing of Molecular Structures',
sofar => worksofar ,
totalwork => totalwork,
target_desc => 'Some description',
units => 'structures');
<<process your structure with your existing code>>
END LOOP;
END;

在单独的 SQL*Plus session 中,您可以通过查询 V$SESSION_LONGOPS 来监控进度。看法
SELECT opname,
target_desc,
sofar,
totalwork,
units,
elapsed_seconds,
time_remaining
FROM v$session_longops
WHERE opname = 'Processing of Molecular Structures';

关于sql - 监控长时间运行的 PL/SQL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7350739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com