我需要为存储的 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');
祝你好运。