如何在SQLPlus执行存储过程后更新日志文件记录结束时间?
解决方案
基础实现(仅记录结束时间)
直接修改Proc1.bat,在sqlplus命令执行完成后,追加写入结束时间到日志文件。利用Windows批处理的%time%变量提取小时和分钟部分,满足hh:mm格式要求。
修改后的批处理代码:
@echo off set "LOG_FILE=C:\Users\username\Desktop\log.txt" echo PROC 1 started at = %time% %date%>> "%LOG_FILE%" sqlplus username/password@db @C:\Users\username\Desktop\procedure1.sql echo Proc1 executed successfully at %time:~0,5%>> "%LOG_FILE%"
优化实现(区分执行成功/失败)
如果需要明确存储过程执行结果,可通过sqlplus的返回码errorlevel判断,成功时写入成功信息,失败时写入失败信息:
@echo off set "LOG_FILE=C:\Users\username\Desktop\log.txt" echo PROC 1 started at = %time% %date%>> "%LOG_FILE%" sqlplus username/password@db @C:\Users\username\Desktop\procedure1.sql if %errorlevel% equ 0 ( echo Proc1 executed successfully at %time:~0,5%>> "%LOG_FILE%" ) else ( echo Proc1 failed at %time:~0,5%>> "%LOG_FILE%" )
进阶实现(记录SQLPlus完整输出)
若需同时留存sqlplus的执行日志(包括存储过程的输出或错误信息),可将sqlplus的标准输出和错误输出都重定向到日志文件:
@echo off set "LOG_FILE=C:\Users\username\Desktop\log.txt" echo PROC 1 started at = %time% %date%>> "%LOG_FILE%" sqlplus username/password@db @C:\Users\username\Desktop\procedure1.sql >> "%LOG_FILE%" 2>&1 if %errorlevel% equ 0 ( echo Proc1 executed successfully at %time:~0,5%>> "%LOG_FILE%" ) else ( echo Proc1 failed at %time:~0,5%>> "%LOG_FILE%" )
关键说明
%time:~0,5%:提取系统时间的前5位,直接得到hh:mm格式的时间字符串。set "LOG_FILE=...":定义日志路径变量,避免重复编写路径,后续修改更便捷。2>&1:将错误输出(标准错误)重定向到标准输出,确保sqlplus的所有输出都写入日志。- 所有操作仅修改Windows批处理文件,无需改动Oracle存储过程或任何数据库对象,完全符合无编辑权限的限制。
内容的提问来源于stack exchange,提问作者ShariefXUsman
相关产品推荐
相关产品推荐

