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;
是的我想我真的必須去你提到的第二種方法,開關。可能不值得擔心如何獲取Tomcat日誌。 – demongolem 2012-03-26 22:27:32
爲了記錄,[這裏是如何從JDBC獲取'DBMS_OUTPUT.GET_LINES'內容](https://stackoverflow.com/a/47831073/521799)(以及MyBatis) – 2017-12-19 15:26:35