0

我正在尝试编写一个批处理脚本来在数据库上运行 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 ! 
)

可以将相同的批处理脚本输出到日志文件并从控制台获取用户输入吗?有没有办法我可以做到这一点?

4

1 回答 1

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
于 2013-08-05T20:32:20.893 回答