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

时间:2019-06-10 21:24:21

标签: oracle plsql

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

1 个答案:

答案 0 :(得分:6)

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

通过将您的过程调用放在带有异常处理程序的BEGIN..END块中,可以生成“ PL / SQL过程已成功完成”。如果未调用异常处理程序,则打印出Successfully completed。如果被调用,请使用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;

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

UTL_FILE.PUT_LINE(fileHandle, SQL%ROWCOUNT || ' rows affected');

好运。