几天来,我一直在疯狂地研究为什么我的批处理文件执行不正常。当我在命令提示符下复制和粘贴代码时,它工作得很好,但执行批处理文件只运行一行,然后停止。
以下是批处理文件中的代码:
sqlplus -s user/password
set colsep ' '
set linesize 32000
set echo off
set feedback off
set trimspool on
set newpage 0
set pagesize 0
spool c:tempsuggmoves.txt
select * from suggestive_moves;
spool off
quit
exit
我找到的唯一解决方案是使用CALL,但我没有调用另一个批处理文件,这无论如何都不起作用。
这不是一个批处理文件。这是一个SQLPlus脚本。
它从命令行工作的原因是,SQLPlus为您提供了自己的命令提示符。从set colsep
到quit
的所有内容都需要在SQLPlus的提示符中键入。您编写的批处理文件正在Windows命令提示符中键入它们。
要执行您想要的操作,请将SQLPlus命令放入一个单独的文件中,并使用SQLPlus:的@选项
sqlplus -s user/password @sqlscript.sql
您必须重定向输入以通过sqlplus执行命令,相反,它被解释为shell命令,并且在sqlplus中不执行任何操作。我认为sqlplus会等待任何停止脚本执行的输入,直到sqlplus被停止/杀死/退出。
要在脚本中直接作为sqlplus命令输入命令,可以使用<<
输入重定向,直到找到一个单词(在这个修改后的代码中,它是END):
sqlplus -s user/password <<END
set colsep ' '
set linesize 32000
set echo off
set feedback off
set trimspool on
set newpage 0
set pagesize 0
spool c:tempsuggmoves.txt
select * from suggestive_moves;
spool off
quit
exit
END
END单词必须位于行首(无缩进)。
Sqlplus具有批处理模式,使用sql命令脚本作为输入,而不是使用直接命令输入重定向。