我正在尝试编写一个批处理脚本来在数据库上运行sql文件。 我希望脚本将sql查询执行的结果放入一个日志文件中(使用>>> SQl_LOGS.txt之类的东西)。这样可以正常工作,但我想获得用户输入 他/她想继续执行下一个SQl查询。
一切,甚至暂停都会重定向到日志文件,因此 我无法在控制台上提供任何输入。
在for循环中调用的子例程:
:ProcessQuery
(
echo WHENEVER SQLERROR EXIT 1
echo WHENEVER OSERROR EXIT 1
echo @%query% XXuser // This should be sent top a log file
) | sqlplus XXuser/XXpwdr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=XX.XX.XX.XX)(Port=XXXX))(CONNECT_DATA=(SID=XXXX)))
echo error level is : %ERRORLEVEL%
IF %ERRORLEVEL% == 1 (
ECHO WARNING : QUERY %query% EXECUTION ERROR ! // these 3 lines should come up in the
// console
echo PLEASE FIX THE ERROR AND THEN HIT ENTER.
pause
) ELSE (
echo %str% %query%
ECHO INFO : QUERY %query% EXECUTION SUCCESSFUL !
)
可以将相同的批处理脚本输出到日志文件并从控制台获取用户输入吗? 有没有办法实现这个目标?
答案 0 :(得分:1)
如果您只想记录脚本的某些部分,请使用>> SQL_LOGS.txt在脚本中的那些特定行上(而不是在调用脚本时使用它)。
至于提示用户提供特定回复,请快速阅读本文:http://www.quepublishing.com/articles/article.aspx?p=1154761&seqNum=12
编辑 - 这是一个受上述链接启发的批处理脚本,可以帮助您实现目标。
@echo off
echo This is an example of accepting user input and writing some output to a log.
:again
set /p answer=Do you want to run a sql script (Y/N)?
if /i "%answer:~,1%" EQU "Y" goto logit
if /i "%answer:~,1%" EQU "N" exit /b
echo Please type Y for Yes or N for No
goto again
:logit
echo sql script goes here. this command's response is sent to the log. >> test.log
goto again