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