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