Sử dụng DBMS_OUTPUT
có nghĩa là SQL * Plus sẽ không hiển thị cho đến khi toàn bộ khối PL/SQL hoàn tất và sau đó sẽ hiển thị tất cả dữ liệu hiện có trong bộ đệm. Do đó, nó không phải là một cách thích hợp để cung cấp một trạng thái đang diễn ra.
Mặt khác, Oracle cung cấp gói DBMS_APPLICATION_INFO được thiết kế đặc biệt để giúp bạn theo dõi mã đang chạy của mình. Ví dụ, bạn có thể làm một cái gì đó giống như
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;
Từ một * SQL riêng biệt Ngoài ra phiên, bạn có thể tiến bộ sau đó lời giáo huấn bằng cách truy vấn xem V$SESSION_LONGOPS
SELECT opname,
target_desc,
sofar,
totalwork,
units,
elapsed_seconds,
time_remaining
FROM v$session_longops
WHERE opname = 'Processing of Molecular Structures';
Nguồn
2011-09-08 15:50:11
+1, ví dụ mẫu đẹp. – DCookie