如何手动生成与SQL * Plus假脱机结果相同的日志文件

use*_*668 2 oracle plsql

我需要为存储的PL / SQL过程生成日志文件或写入日志表。如果我理解正确,则无法在存储过程中使用假脱机。我知道我可以使用UTL_FILE写入日志文件,但是我试图弄清楚如何获取一些我想编写的信息。假脱机处理时,在执行每个语句后都会得到某种结果字符串,例如“成功完成PL / SQL过程”或“选择了5行”。有没有办法获取该输出或类似的输出,以便我可以将它们放在日志中?

Bob*_*ica 6

不直接。该输出是由SQL * Plus生成的,而不是由数据库中的任何内容生成的。如果要在过程中的每个SQL语句之后生成输出,则必须在过程中放置​​代码以输出所需的内容。

通过将过程调用放在BEGIN..END带有异常处理程序的块中,可以生成“ PL / SQL过程成功完成” 。如果未调用异常处理程序,请打印出来Successfully completed。如果调用它,请使用a WHEN OTHERS转储所需的任何调试信息。

BEGIN
  INVOKE_YOUR_PROCEDURE_HERE;
  UTL_FILE.PUT_LINE(fileHandle, 'PL/SQL procedure successfully completed');
EXCEPTION
  WHEN OTHERS THEN
    UTL_FILE.PUT_LINE(fileHandle, 'Procedure failed: ' || SQLCODE || ' - ' || SQLERRM);
END;
Run Code Online (Sandbox Code Playgroud)

可以在执行SELECT语句后通过打印SQL%ROWCOUNT来完成“选择5行”,如下所示:

UTL_FILE.PUT_LINE(fileHandle, SQL%ROWCOUNT || ' rows affected');
Run Code Online (Sandbox Code Playgroud)

祝你好运。