oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?
我需要在pl / sql中进行调试以计算过程次数,我想使用:
SELECT systimestamp FROM dual INTO time_db;
DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);
但我不知道输出将到达何处,以及如何将其重定向到包含我要收集的所有数据的日志文件?
10个解决方案
37 votes
DBMS_OUTPUT并不是最佳的调试工具,因为大多数环境都不是本地使用的。 但是,如果要捕获DBMS_OUTPUT的输出,则只需使用DBMS_OUTPUT.get_line过程。
这是一个小例子:
SQL> create directory tmp as '/tmp/';
Directory created
SQL> CREATE OR REPLACE PROCEDURE write_log AS
2 l_line VARCHAR2(255);
3 l_done NUMBER;
4 l_file utl_file.file_type;
5 BEGIN
6 l_file := utl_file.fopen('TMP', 'foo.log', 'A');
7 LOOP
8 EXIT WHEN l_done = 1;
9 dbms_output.get_line(l_line, l_done);
10 utl_file.put_line(l_file, l_li