批处理文件执行问题(CALL 不起作用)
Posted
技术标签:
【中文标题】批处理文件执行问题(CALL 不起作用)【英文标题】:Batch file execution issue (CALL does NOT work) 【发布时间】:2015-03-22 15:34:10 【问题描述】:几天来我一直在疯狂研究为什么我的批处理文件不能正常执行。当我在命令提示符下复制并粘贴代码时,它工作正常,但执行批处理文件只运行一行,然后停止。
这是批处理文件中的代码:
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:\temp\suggmoves.txt
select * from suggestive_moves;
spool off
quit
exit
我找到的唯一解决方案是使用 CALL,但我没有调用另一个批处理文件,而且无论如何都没有用。
【问题讨论】:
【参考方案1】:这不是批处理文件。那是一个 SQLPlus 脚本。
它从命令行运行的原因是因为 SQLPlus 向您展示了它自己的命令提示符。从set colsep
到quit
的所有内容都需要输入到SQLPlus 的提示符中。您编写的批处理文件正在将它们输入到 Windows 命令提示符中。
要做你想做的事,把 SQLPlus 命令放到一个单独的文件中,并使用 SQLPlus 的 @ 选项:
sqlplus -s user/password @sqlscript.sql
【讨论】:
太棒了!谢谢!【参考方案2】:您必须重定向输入以通过 sqlplus 执行您的命令,而不是将其解释为 shell 命令并且不在 sqlplus 中执行任何操作。我认为 sqlplus 等待任何停止脚本执行的输入,直到 sqlplus 停止/杀死/退出。
要在脚本中直接作为 sqlplus 命令输入命令,您可以使用 <<
input 重定向直到找到一个单词(在此修改后的代码中为 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:\temp\suggmoves.txt
select * from suggestive_moves;
spool off
quit
exit
END
END 字必须在行首(无缩进)。
Sqlplus 有一个批处理模式,使用 sql 命令脚本作为输入,而不是使用直接命令输入重定向。
【讨论】:
以上是关于批处理文件执行问题(CALL 不起作用)的主要内容,如果未能解决你的问题,请参考以下文章