【问题标题】:How to manually generate a log file the same as SQL*Plus spool results如何手动生成与 SQL*Plus 假脱机结果相同的日志文件
【发布时间】:2019-10-25 06:53:56
【问题描述】:

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

【问题讨论】:

  • 命令是静态生成的,您可以在其中为每个命令编写一个日志调用,还是您正在处理一组动态 SQL 语句并且直到运行时才知道语句的类型?跨度>

标签: oracle plsql


【解决方案1】:

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

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

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

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

祝你好运。

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 2012-07-30
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2016-11-05
    • 2019-04-22
    相关资源
    最近更新 更多