В пакете DBMS_OUTPUT
есть несколько других процедур, которые вы можете использовать. DBMS_OUTPUT.ENABLE
работает так же, как команда SQL * Plus set serveroutput on
, в том смысле, что она выделяет буфер для DBMS_OUTPUT.PUT_LINE
для записи. DBMS_OUTPUT.GET_LINE
может использоваться для извлечения данных, записанных в этот буфер при предыдущих вызовах DBMS_OUTPUT.PUT_LINE
. Таким образом, должна быть возможность вызвать функцию ENABLE
, вызвать процедуру, которая записывает несколько строк в буфер, а затем вызвать GET_LINE
(или GET_LINES
), чтобы извлечь данные, которые были записаны в DBMS_OUTPUT
буферизируйте и записывайте эти данные в свои журналы.
Однако может быть проще перенаправить запись в таблицу базы данных Oracle, чем пытаться использовать DBMS_OUTPUT
. Одним из распространенных подходов является создание собственного пакета, в котором есть переключатель для определения, записывать ли в DBMS_OUTPUT
или записывать в таблицу. Что-то вроде
CREATE OR REPLACE PACKAGE p
AS
procedure l( p_str IN VARCHAR2 );
END;
CREATE OR REPLACE PACKAGE BODY p
AS
g_destination INTEGER;
g_destination_table CONSTANT INTEGER := 1;
g_destination_dbms_out CONSTANT INTEGER := 2;
PROCEDURE l( p_str IN VARCHAR2 )
AS
BEGIN
IF( g_destination = g_destination_dbms_out )
THEN
dbms_output.put_line( p_str );
ELSE
INSERT INTO log_table ...
END IF;
END;
BEGIN
g_destination := <<determine which constant to set it to. This
may involve querying a `SETTINGS` table, looking
at the environment, or something else>>
END;
END;