批处理文件执行问题(CALL 不起作用)

Batch file execution issue (CALL does NOT work)

几天来我一直在疯狂研究为什么我的批处理文件不能正常执行。当我在命令提示符下复制和粘贴代码时,它工作正常,但执行批处理文件只运行一行然后停止。

这是批处理文件中的代码:

    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,但我没有调用另一个批处理文件,而且无论如何都不起作用。

这不是批处理文件。那是一个 SQLPlus 脚本。

它在命令行中运行的原因是因为 SQLPlus 向您展示了它自己的命令提示符。从 set colsepquit 的所有内容都需要输入到 SQLPlus 的提示符中。您编写的批处理文件正在将它们输入 Windows 命令提示符。

做你想做的事,将 SQLPlus 命令放入一个单独的文件,并使用 SQLPlus 的 @ 选项:

sqlplus -s user/password @sqlscript.sql

您必须重定向输入以通过 sqlplus 执行您的命令,而不是它被解释为 shell 命令并且不要在 sqlplus 中执行任何操作。我认为 sqlplus 等待任何停止脚本执行的输入,直到 sqlplus 是 stopped/killed/exited.

要在脚本中直接输入命令作为 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:\temp\suggmoves.txt
select * from suggestive_moves;
spool off
quit
exit
END

END 词必须在行首(无缩进)。

Sqlplus 有批处理模式,使用 sql 命令脚本作为输入,而不是使用直接命令输入重定向。