使用SQL Plus将带有空格的文件名传递给SPOOL命令会产生SP2-0768 Illegral SPOOL命令错误

时间:2014-10-27 21:39:04

标签: c# sqlplus oracle11gr2 spool

我的sql文件包含

`SPOOL &1;
//sql code to execute
SPOOL OFF;`

使用SQL Plus执行sql文件,使用Process.Start从C#代码调用SQL Plus ...代码剪切

`var m_StartInfo = new ProcessStartInfo();
m_StartInfo.FileName = "SQLPLUS.EXE";
m_StartInfo.CreateNoWindow = true;
m_StartInfo.UseShellExecute = false;
m_StartInfo.Arguments = String.Format("{0}\"{1}\" \"{2}\"", connectionString, sqlfile, sqlLogFileName);
m_Process = Process.Start(m_StartInfo);
Other code.....`

它工作正常,sqlplus日志在sqlLogFileName位置创建正常。但是,如果sqlLogFileName之间有空格(例如" C:\ My Application \ log.txt"),则不会创建日志文件,而是在SQL Plus上给出错误SP2-0768 Illegal SPOOL命令窗口

有任何建议如何解决这个问题?我正在使用Oracle 11GR2

2 个答案:

答案 0 :(得分:0)

Oracle软件旨在用于没有空格的目录(这是Linux / Unix中公认的标准,即使技术上你可以做其他事情)。在Windows上,情况有所不同,但Oracle软件也有同样的想法:它不喜欢空白。因此,修复是明确的:假脱机到没有空格的目录。这是建议,任何人都可以自由选择。

答案 1 :(得分:0)

您只需用双引号括起您的文件名即可。 类似的东西:

spool "Test with spaces.txt"

或者在您的情况下使用参数:

SPOOL "&1"

我认为最好不要使用空格,正如@tvCa所解释的那样。

旁注:

我相信StarPilot所指的是关于redirect a command output to a file的内容,这就是为什么当你尝试使用它时它没有用的原因。 例如,在命令提示符下,您将写:

dir > dir.txt

这样可以在dir.txt中保存dir的输出。