Vertica vsql.exe触发ERROR 3326时返回errorlevel 0的检测方法求助
检测vsql执行中ERROR 3326错误的批处理方案
针对你遇到的vsql返回ERROR 3326却返回errorlevel 0的问题,可通过以下几种方案在批处理中实现错误检测:
方法1:捕获并检查标准错误输出
ERROR 3326这类执行错误会被vsql输出到标准错误流(stderr),我们可以将stderr重定向到日志文件,再检查日志中是否包含目标错误信息:
修改后的批处理脚本:
@echo off :: 清理历史错误日志 if exist error.log del error.log :: 执行查询,将标准错误输出写入error.log vsql.exe -h <hostname> -U <user> -w <pwd> -o output.csv -Ac "SELECT ....;" 2> error.log :: 检查日志中是否存在ERROR 3326 findstr /C:"ERROR 3326" error.log >nul if %errorlevel% equ 0 ( echo 触发ERROR 3326:执行时间超过限制 :: 可添加错误处理逻辑,比如删除不完整的CSV文件 del output.csv exit /b 1 ) :: 处理其他常规错误(如连接、语法错误) if errorlevel 1 ( echo 执行出现其他异常 exit /b 1 ) echo 查询执行成功
方法2:验证输出CSV的完整性
成功执行的CSV文件末尾会带有(#### rows)格式的统计行,可通过检查该行是否存在来判断查询是否完整完成:
修改后的批处理脚本:
@echo off vsql.exe -h <hostname> -U <user> -w <pwd> -o output.csv -Ac "SELECT ....;" :: 检查CSV最后一行是否符合成功执行的结尾格式 findstr /R "^([0-9]* rows)$" output.csv >nul if %errorlevel% neq 0 ( echo CSV文件不完整,疑似触发ERROR 3326错误 :: 添加错误处理逻辑 del output.csv exit /b 1 ) :: 处理其他常规错误 if errorlevel 1 ( echo 执行出现其他异常 exit /b 1 ) echo 查询执行成功
方法3:结合两种方法(推荐)
同时检查错误日志和CSV完整性,能大幅提升异常检测的可靠性:
@echo off if exist error.log del error.log vsql.exe -h <hostname> -U <user> -w <pwd> -o output.csv -Ac "SELECT ....;" 2> error.log :: 检查ERROR 3326错误 findstr /C:"ERROR 3326" error.log >nul if %errorlevel% equ 0 ( echo 触发ERROR 3326:执行时间超过限制 del output.csv exit /b 1 ) :: 检查CSV文件完整性 findstr /R "^([0-9]* rows)$" output.csv >nul if %errorlevel% neq 0 ( echo CSV文件不完整,执行异常 del output.csv exit /b 1 ) :: 处理其他常规错误 if errorlevel 1 ( echo 执行出现其他异常 exit /b 1 ) echo 查询执行成功
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

