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

请您参考如下方法:

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

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

祝你好运。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!