You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:37:26