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



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

以下是批处理文件中的代码:

    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 colsepquit的所有内容都需要在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命令脚本作为输入,而不是使用直接命令输入重定向。

最新更新